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の複数条件でフィルターしてリアルタイムで表示することが可能となります。
とりあえず、技術メモでした。
