Linux では、ファイルの中からキーワードを含む「行」を素早く検索したいことがよくあります。たとえばログを見ているときに、ある時刻に発生したエラーを探したい場合があります。ファイルを開いて一行ずつ探すのはあまり効率的ではありません。そんなときに grep の出番です!
grep は簡単に覚えられます。指定したキーワードを使って、そのキーワードを含む行をすばやく表示してくれます。ここでは例として、syslog の中から CRON を含むすべての記録を探すとします。状況に応じて使えるように、いくつかの書き方を紹介します。
cat /var/log/syslog* | grep "CRON" grep "CRON" /var/log/syslog* grep "CRON" /var/log/syslog* > result.txt
大文字と小文字は区別されるので注意してください!
ただ、これだけでは足りません。ここからは grep のさまざまなコツをまとめます。
キーワードに色を付けて表示する
grep の検索結果は、初期状態では色が付きません。キーワードを色付きで強調表示したい場合は、--color オプションを付けてください。grep "CRON" --color /var/log/syslog*
A または B の検索
A または B に一致するデータを検索したい場合、二回に分けて実行する必要はありません。次のどちらの書き方でもかまいません。grep -E "A|B" /var/log/syslog*grep -e “A” -e “B” /var/log/syslog*
A と B の検索
A と B の両方に一致するデータを探したい場合、たとえば CRON と apache の両方を含む記録を探すときは、一つにまとめた検索パターンを使う必要はありません。次のように入力します。grep "CRON" /var/log/syslog* | grep "apache"同じ考え方で、三つ、四つ、またはそれ以上のキーワードを使うこともできますし、A または B と組み合わせることもできます。
# CRON、apache、command がすべて含まれる行だけが検索される grep "CRON" /var/log/syslog* | grep "apache" | grep "command"CRON+apache または CRON+backup
grep “CRON” /var/log/syslog* | grep -E “apache|backup”
前後 N 行を表示する
grep は初期状態では、検索に一致した行だけを表示します。しかし、前後の経緯を理解するために、前後の数行も見たい場合があります。その場合は、後ろ N 行を表示する -A オプションと、前 N 行を表示する -B オプションを使います。# 前後それぞれ 3 行 grep "CRON" -A3 -B3 /var/log/syslog*