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

リアルタイムでアクセスログ等を表示する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の複数条件でフィルターしてリアルタイムで表示することが可能となります。

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

Twitterでも情報配信中!




コメントを残す

メールアドレスが公開されることはありません。



次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

※コメントは承認制です。承認されるまで表示されません。