スポンサーリンク
linuxで最も使うコマンドの一つがgrepです。特にサーバの運用者はログを見たり設定ファイルのチェックをしたりする時に、息をするように使っているかと思います。ということで今回はよく使うオプションをメモしておきたいと思います。
linuxのコマンドの一つで、文字列を検索するために使うコマンド
です。検索元は標準入力やファイルが指定可能です。
ちなみに"grep"という名称の由来は「global regular expression print」の略だそうです。
今回は以下のようなファイルを例にオプションをご紹介します。
# cat grep.txt
1. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3. cccccccccccccccccccccccccccccc
4. dddddddddddddddddddddddddddddd
5. eeeeeeeeeeeeeeeeeeeeeeeeeeeeee
通常、grepは検索文字列と一致した行だけを表示しますが、このオプションを付けると一致行の前 or 後ろ or 前後 の行も表示させることができます。
grep -A 1 "3." grep.txt
結果
# grep -A 1 "3." grep.txt
3. cccccccccccccccccccccccccccccc
4. dddddddddddddddddddddddddddddd
grep -B 1 "3." grep.txt
結果
2. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3. cccccccccccccccccccccccccccccc
grep -1 "3." grep.txt
結果
2. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3. cccccccccccccccccccccccccccccc
4. dddddddddddddddddddddddddddddd
次のオプションは一致した文字列を表示するのではなく、一致した文字列の数を表示するオプションです。
初心者の頃はgrep "文字列" | wc -l
というようにパイプでつなげてwcで行数を表示していましたが、実はgrepコマンドだけでできると知って衝撃を受けたことを覚えています。
grep -c "3." grep.txt
結果
1
通常linuxは大文字/小文字を別の文字として認識しますので、grepでも同様です。しかしmacアドレスなど大文字で書かれてるか小文字で書かれてるかわからないパターンでは困ることがたまにあります。
そんなときには大文字小文字のどちらでもヒットする -i オプションを使います。
grep -i "A" grep.txt
結果
1. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ちなみにオプションを付けないと何も引っかかりません。
grep "A" grep.txt
結果
grepはデフォルトでは正規表現を考慮してくれます。しかし特殊文字を文字列として検索したい場合にはこれが邪魔になることがあります。そんな時は -F オプションを付けます。
grep -F "[1-3]" grep.txt
結果ですが、何も表示されません。
オプションを付けない場合、[数字-数字]
というのは数字の範囲指定になるので、1~3が引っかかります。
grep "[1-3]" grep.txt
結果
1. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3. cccccccccccccccccccccccccccccc
ちなみに私は -Fを付けると普通のgrepより速いと思っていたのですが、この記事を書く時に実際に試したところ、特に速くならない
ことがわかりました。。
次は少し毛色が違いますが、複数のファイルを検索する時、一致した箇所ではなく、ファイル名だけを表示する
オプションになります。
つまりこういうことです。
grep -l "3." grep.txt
結果
grep.txt
このようにファイル名だけが表示されます。
大きなファイルを検索するときなど、複数箇所でマッチすることがある場合などに使います。
$ grep -n "3." grep.txt
結果
3:3. cccccccccccccccccccccccccccccc
以上、grepのよく使うオプションのまとめでした。
スポンサーリンク