意外と知らない grep コマンドのオプション
もう仕事とかどうでもいいからみんなで花見しよう!花見!って感じの天気ですね。どうもこんにちは nakamura です。
基本的なコマンドほど意外と知らない機能あったりするよね~という事で今回は grep コマンドのオプションをおさらいしてみました。おそらく有史以来もっとも使われた Unix コマンド BEST10 には入っていると思われる grep 先輩ですが、いざおさらいしてみるとあるわあるわ知らないオプションが・・・。はい、もっと勉強します・・・。
とりあえず僕がよく使う&もっと早く出会っていれば・・・と思ったオプションをいくつか紹介していきます。
基本的な挙動に関するオプション
-G -e ・・・デフォルトオプション
-i ・・・大文字小文字を区別しない
-v ・・・パターンにマッチしなかった行を抜き出して表示
何もオプションを指定しない場合 grep は -G -e の挙動になります。-G は基本正規表現を使用、-e は後ろに続く文字列を正規表現のパターンとして読み込むためのオプションです。つける必要はないけど、-e をつけておくと『あぁここがパターン文字列か』というのが分かりやすくてよいと思います。
# 大文字小文字関係なく FILE から nakamura にマッチする行を抜き出して表示
grep -Gi -e nakamura FILE
# ↑と↓は同じ
grep -i nakamura FILE
# nakamura という文字列が含まれていない行を表示
grep -iv -e nakamura FILE
-i, -v はめっちゃ使うよね~。
出力を制御するオプション
-o ・・・行全体ではなくマッチした文字列のみを表示
このオプション割りと最近知ったのですが、これを知るまではひたすら sed でいらない所削ったりしていて、もっと早く知ってればーーーー!!と思わず叫びそうになったオプションです。青春の日々を sed 先輩にかなり奪われたな・・・と大人になってから気付きました。
-c ・・・マッチした行は表示せず行数を表示
こいつも知るまでは grep したのを wc -l とかいちいちしていたのですが、grep だけでいけたみたいです。まぁでもパイプで wc コマンドに渡すだけなので青春の日々はあまり奪われていません。
-r ・・・検索対象にディレクトリを指定するとディレクトリ内のファイルを再帰的に検索してくれる
find やら ls でファイル名を取得して xargs grep ・・・っていう処理も簡単なものであれば grep コマンドだけでいけるんですね。ただ find の -maxdepth -mindepth 的な機能はないので、がつがつ使える感じじゃないですが、場合によっては有用そうです。デフォルトでファイル名を一緒に表示してくれます。
-n ・・・マッチした行と一緒に行番号を表示
これもまぁ、たまに使う場面はありそう。
# nakamura に合致する部分(not 行)のみを表示
grep -o -e nakamura FILE
# nakamura に合致する行数を表示
grep -c -e nakamura FILE
# カレントディレクトリ内のファイルを再帰的に検索、行番号も一緒に表示。
grep -rn -e nakamura .
前後表示のオプション
-B ・・・指定した行数分前から表示する
-A ・・・指定した行数分後ろまで表示する
-C ・・・指定した行数分前後を表示する
そう頻繁には使わないですが、巨大なダンプファイルから一部分だけ抜き出したい時とか使えます。
# nakamura に合致する行と前後 5 行を表示
grep -C 5 -e nakamura FILE
終わりに
他にもオプションいっぱいあるので man grep か grep --help で見てみてください。
たまにこういうのおさらいすると楽しいな~。
シーブレインでは一緒にお花見してくれるプログラマ募集中です。
- Grep Pocket Reference (Pocket Reference (O'Reilly))
- John Bambenek Agnieszka Klus
- Oreilly & Associates Inc 2009-02
by G-Tools , 2012/04/12