tailの結果をgrepの複数条件でフィルターしてリアルタイムで表示する

2012年 1月 17日 14:16

リアルタイムでアクセスログ等を表示するtailですが、単純に表示するだけではなく、grepで結果をフィルターしたい場合があります。そんな場合の技術メモです。

通常のログ監視等では-fをつけて次のような感じになります。

tail -f access.log

grepでフィルターする場合はパイプで繋げます。
例えば、次の例では”.html”の含まれる行のみを表示します。

tail -f access.log | grep ".html"

もちろん複数条件もできます。
次の場合は”.html”の含まれる行でかつ、”.gif”は含まれない行が表示されます。

tail -f access.log | grep ".html" | grep -v ".gif"

ただし、上記の場合、grepが勝手に結果をバッファーしてしまい、ある程度たまってからでないと表示されません。

リアルタイムで表示されないと意味がありませんので、grepに–line-bufferedオプションを付けてあげます。

tail -f access.log | grep --line-buffered ".html" | grep --line-buffered -v ".gif"

これで、tailの結果をgrepの複数条件でフィルターしてリアルタイムで表示することが可能となります。

とりあえず、技術メモでした。


トラックバック URL


※言及リンクのないトラックバックは削除されます。
※書き込まれてから公開されるまで時間がかかる場合があります。

コメントをどうぞ

Spam protection by WP Captcha-Free

※書き込まれてから公開されるまで時間がかかる場合があります。