テキスト操作系コマンド

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 -nr12フィールドは無視し,3番目のフィールがから各行末まででソート
# sort -k32フィールドで数値的にソートし同じになったものを第5フィールドの
第34文字で更にソート(フィールドの区切りとして':'を使用)
# 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, --unique1回しか現われない行だけを出力

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/{}/status1秒間隔で測定
# while :; do pgrep http | xargs -i grep -H VmPeak /proc/{}/status; sleep 1 ; done