tail -f access.log


みたいな感じでログを追うことはよくありますよね。

いやでもほむほむに関するログだけでいいわー。って時は


tail -f access.log | grep homuhomu


みたいにしますよね。

青いのが関係するログはいらないわーって時更に


tail -f access.log | grep homuhomu | grep -v sayaka


みたいにしますよね。

grep1段階までなら問題ないんですが、多段のgrepをかました時にtail -f してるのにリアルタイムに出力されねー。
なんかまとめて表示されるんだけど・・・

ってなりませんか?

これgrepが出力先が標準出力かどうかを見てbufferを切り替えているかららしいです。

オプションで行単位のbufferに変えられるのでパイプに対して出力しているgrepに --line-bufferedとい指定してやると期待通りの動作になるみたいですね。

さっきのだと


tail -f access.log | grep --line-buffered homuhomu | grep -v sayaka


これで期待通りの動作になるようです。