回答:
grepを使用します。その目的のためだけに構築されました。
/ var / log / syslogの末尾から「cron」が含まれる行を見つけるには、次を実行します。
tail -f /var/log/syslog | grep cron
また、stdinを介して何でも受け入れるため、上記と同じ方法で(|記号を使用して)パイピングすることにより、他のコマンドの出力でも使用できます。
他にもいくつかのアイデアがありますが、それほど単純ではありませんが、いくつかの興味深い追加の柔軟性があります。
最初に、grepの代わりにawkでフィルタリングできます。
tail -f /var/log/messages | awk '/myfilterword/'
これはを使用した例とまったく同じように機能しgrep
ます。awkのパワーを使用して、これを拡張できます。次に例を示します。
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
出力の6番目から最後のフィールドを出力します(フィールドは空白で区切られています)
別の同様のアイデアは、perl one-linerを使用することです:
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
それはまったく同じように動作しgrep
ます。たぶん、行番号カウンターと6番目のフィールドだけが必要ですか?これはどう:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
明らかに、これらの種類のすべては他のツールでも実行できますが、ここでawkやperlなどのより汎用的な言語を使用する楽しい方法があることを説明したかったのです。
grep
ことですが、より長いパイプラインの一部である場合など、非対話的に使用された場合にバッファリングされることを認識することが重要です。GNU grep 2.5.1は--line-buffered
、パイプラインからgrepを削除することがオプションではない場合に、この問題を回避するオプションを提供します。(grepがバッファリングすると言うとき、バッファが4kのような値に達するまで出力が表示されないことを意味します。)