テキスト操作系コマンド
grepコマンド
# grep meas$ /etc/* 2> /dev/null 行末にmeasが含まれるファイルの検索 # grep root /etc/* 2> /dev/null 行中にrootを含むファイルの検索 # grep ^root /etc/* 2> /dev/null 行頭にrootを含むファイルの検索 -v :マッチしない行だけを表示 -i :大小の区別をしない -n :行番号を表示 -l :マッチしたファイルを表示 -c :マッチした行数を表示 'F..D': 1文字にマッチ '*D' :複数文字にマッチ '^F' :先頭にマッチ 'F$' :行末にマッチ \ :特別文字を打ち消す [] :カッコ内の一文字にマッチ
egrepコマンド
# egrep '(reject|warn)' /var/log/messages
awkコマンド
1フィールド目と3フィールド目を表示 # awk '{print $1,$3}' data 9フィールド目を表示 # awk '{print $9}' data 先頭がADMの行を表示 # awk '/^ADM/' data 2フィールド目と3フィールド目が同じ行を表示 # awk '$2==$3' data 1フィールド目と3フィールド目をタブで区切り表示 # awk '{print $1,"\t",$3}' data セパレータが:で2フィールド目を表示 # awk -F: '{print $2}' data 2フィールド目と3フィールド目が同じ行の1フィールド目を表示 # awk '{ if ( $2 == $3 ) print $1 }' data
sedコマンド
マッチした行の削除(d) # sed '1,5d' file1 > file2 検索パターンにマッチした文字列の置換 # sed s/linux/LINUX/ 検索パターンにマッチした文字列の全部置換 # sed s/linux/LINUX/g 10行目までを置換 # sed '1,10s/^/>/g' sample.txt 検索文字列にマッチした文字の置換(y) # sed y/ABC/123/ namesファイルのすべてのFをBに置き換え # sed 's?F/B/g' names namesファイルのFで始まる行を削除 # sed '/^F/d' names namesファイルの2行目から最終行までを削除 # sed '2,$d' names namesファイルの1行目から4行目にFをBに置き換え # sed '1,4,s/F/B/g' names namesファイルの最終行にadd.1ファイルを読み込む # sed '$r add.1' naems namesファイルの先頭にFがある行をnewdataに書き込み # sed '/^F/w newdata' names
trコマンド
小文字を大文字に変更 # tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 小文字を大文字に変更 # tr a-z A-Z 小文字を大文字に変更 # tr '[:lower:]' '[:upper:]' :を削除 # tr -d ':' スペースを削除 # cat file1 | tr [:space:] ''
sortコマンド
数値的に降順(逆順)にソート # sort -nr 第1~2フィールドは無視し,3番目のフィールがから各行末まででソート # sort -k3 第2フィールドで数値的にソートし同じになったものを第5フィールドの 第3~4文字で更にソート(フィールドの区切りとして':'を使用) # sort -t : -k 2,2n -k 5.3,5.4 パスワードファイルを第5フィールドでソートし 先頭の空白文字は無視 第5フィールドが同じ値を持つ行は 第3フィールドのユーザーIDで数値的にソート # sort -t : -k 5b,5 -k 3,3n /etc/passwd
uniqコマンド
# sort file | uniq -d -c, --count :それぞれの行が何回現われたかを行の内容とともに表示 -i, --ignore-case:比較の際に英大文字小文字の違いを無視 -d, --repeated :同じ内容が 2行以上あるものだけを出力 -u, --unique :1回しか現われない行だけを出力
cutコマンド
7文字目を取り出し # cut -c7 samplt.txt
pasteコマンド
デリミタ";"で水平方向にファイル連結 # paste -d";" sample1.txt sample2.txt
joinコマンド
共通フィールドを持つ行を連結
# join -j 1 sampl1.txt sample2.txt
splitコマンド
sample.txtを100行毎に分割しs_smaple.xxに出力 # split -100 sample.txt s_sample.
tacコマンド
catコマンドの反対
expandコマンド
テキスト中のタブをスペースに変換
unexpandコマンド
行頭にある連続した空白をタブに変換
いろいろ
ファイルの1カラム目をソートしてファイルに出力 # awk '{print $1}' file_name | sort > /tmp/bbb ファイルサイズとファイル名のみを抜き出して表示 # ls -l | awk '{print $5,$NF}' $5は「5列目のデータ」の意味。NFは、各行のフィールド数(列の数) $NFは「NF列目のデータ」つまりその行の最後の列のデータということ 出力順番を変えてソート # cat site.txt | awk '{print $3,$2,$1}' | sort meeagesファイルの6フィールド目の出力をソートしてカウント # cat /var/log/messages | awk '{print $6}' | sort | uniq -c ApacheプロセスのMAXメモリ使用量 # pgrep apache | xargs -i grep VmPeak /proc/{}/status ※1秒間隔で測定 # while :; do pgrep http | xargs -i grep -H VmPeak /proc/{}/status; sleep 1 ; done