gzやtar.gzに固められたログをgrepする

Apacheアクセスログgrepしようと思ったら、logrotateされたログがgzで固められてました。1個1個はlessで中を見れるけど、全ファイルからgrepは出来ません。開いてはファイル内検索して回るのは、さすがにめんどすぎるので、調べました。

gzの場合

$ zgrep "foo" access_log.2.gz
$ gzip -c access_log.2.gz | grep "foo"

-cオプションは--stdoutで、解凍結果を標準出力にだします。

$ ls -r | xargs zgrep "foo"

ログファイル全部からgrepするにはこうなります。って、通常のコマンドにzつけただけだね。logrorate前のaccess_logだけはgz圧縮されてないけど、zgrepで問題なく調べられます。

tar.gzの場合

$ tar -O -xzvf bar.tar.gz | grep 'foo'

gzipと違い-Oオプションが--stdoutで、解凍結果を標準出力にだします。実はtar.gzの例はついでに見かけただけなので、zgrepが対応してるのかとか、確認してません。

zipの場合

zipgrepってのがあるみたい。

環境

Linux CentOS 5