この記事をシェアする

Webサイトのログ(Apacheのアクセスログ等)調査とかでgrepを利用する際に使う記法についての備忘録

基本

grep "hoge" example.txt

ファイル「example.txt」から「hoge」が含まれる行を抽出する

検索ワードの前後何行かを抜き出したい時

grep -A 5 "hoge" example.txt

hogeが存在する行に加え、後ろ5行も抽出する

grep -B 5 "hoge" example.txt

hogeが存在する行に加え、前5行も抽出する

grep -C 5 "hoge" example.txt

hogeが存在する行に加え、前後5行も抽出する

AND検索

パイプラインで繋げば良い。

grep "hoge" example.txt | grep "foo"

hogeとfooが両方含まれる行を抽出。

grep -A 5 "hoge" example.txt | grep "foo"

grep -B 5 "hoge" example.txt | grep "foo"

hogeが含まれる行に加え、その前(後ろ)5行を抽出。更にそこからfooが含まれる行を抽出。

OR検索

grep -e "hoge" -e "foo" example.txt

grep -A 5 "hoge" example.txt | grep -e "foo" -e "bar"

-eオプションを使うことで検索ワードを複数指定できる

複数ファイルを対象にして検索をかける

例えば
20200101.log
みたいな、ファイル名が
YYYYMMDD.log
ってフォーマットのログファイル群があったとして

grep "hoge" 202001*.log

ワイルドカード「*」をファイル名の一部に使うことで2020年1月のログファイル全てを対象に取って検索をかけることができる。

Apacheのアクセスログに対してgrepをかける時によくやるヤツ

特定のページへのアクセスを抜き出す

grep "T /hoge" access_log

「T 」をつけるのがミソで、こうすることで
GET /hoge
ならびに
POST /hoge
を拾いつつ、リファラがヒットしてしまうのを回避できる。

grep "T /hoge" access_log | grep "192.168.1.1"

さらにIPアドレスとかで絞り込みしたい時はパイプラインを使えばOK。

まとめ

grepでは正規表現も使えるけど、それを使うまでもなく単純なオプションの組み合わせで案外何とかなる場面が多いように感じる。

Windowsでgrep使いたい? PowerShellに「Select-String」ってコマンドがあるからそれを使うといいよ。

この記事をシェアする