回答:
私はgrepの代わりにawkを使用することについて知りませんが、これは私のために動作します:
tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'
編集:としてdmouratiとカレブは 指摘し、あなたも使用できるegrep
代わりのgrep -E
便宜のために。一部のシステムでは、これは同じバイナリへのリンクになり、他のシステムではgrepパッケージで提供されるコピーになります。いずれにせよ、-E
スイッチの代替として機能します。ただし、GNU grepのmanページによると:
[…] 2つのバリアントプログラムが
egrep
ありfgrep
、利用可能です。egrep
はと同じgrep -E
です。fgrep
はと同じgrep -F
です。egrep
またはfgrep
非推奨の直接呼び出しですが、それらに依存する履歴アプリケーションを変更せずに実行できるようにするために提供されています。
これらは同義のコマンドであるため、egrepをまったく使用しない場合を除き、設定が優先されます。ただし、上位互換性のために、grep -E
構文を使用することをお勧めします。これは、他の方法が公式に廃止されているためです。
grep -E
代わりにegrep
、重複した回答が必要ですか?
パイプで区切って、フィルターで除外する単語のリストをegrepに入力してみてください。
tail -f log_file | egrep -v 'ELB|Pingdom|Health'
一致リストの周りの括弧の使用はオプションです。以来|
、それがサブグループの一部として発生しているか否かのgrepして、論理OR演算子として扱われます。'(ELB|Pingdom|Health)'
まったく同じように機能します。一部の人にとっては、構文がより明白な場合があります。括弧を追加することなく単一の一致から可能な一致のリストに切り替えることができるため、入力しなくても簡単です。
信用をmultitail
高めるために、出力のフィルタリングに関してはninja fooを実行することに言及する価値があります。たとえば、次のように単語をフィルタリングできます。
multitail -e ELB -e Pingdom -e Health -f log_file
また、単にフィルタリングするのではなく、出力を色付けしたり、ハイライトしたりするために使用することもできます。
EDit: egrepが非推奨の代替方法である方法の完全な説明については、DTestsの回答とコメントを参照してくださいgrep -E
。
なぜこの情報を記録したいのですか?
ログファイルの内容に応じてスクリプト化された動作が必要な場合は、Expectを使用してフィルタリングを実行できます。(http://en.wikipedia.org/wiki/Expect)ExpectはTcl拡張ですが、ExpectのPythonバージョンもあります。
Expectは、ステートや入力ストリームに存在するパターンに応じて異なる動作を条件付きで指定できるステートメントのような強力で柔軟なスイッチを提供します。例えば:
expect {
"password:" {
send "password\r"
}
"yes/no)?" {
send "yes\r"
set timeout -1
}
timeout {
exit
}
-re . {
exp_continue
}
eof {
exit
}
}
したがって、expectステートメントでパターンを指定し、異なる動作を指定し、ループ全体をラップすることができます。また、入力の一部を別のファイルに書き込む、または完全にドロップする非常に強力なフィルターを簡単に作成できます。または、入力内容に応じてアクションを実行し、他のスクリプトを実行します。
それでは、ログファイルをフィルタリングしたり、ログの入力に対してアクションを実行したりするのは、アーカイブの理由だけなのでしょうか。