tail -fで、特定のキーワードを含むものを除外するにはどうすればよいですか?


回答:


58

私は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、重複した回答が必要ですか?
カレブ

@カレブなぜそうなのかわかりません。そこ皮膚に複数の方法猫だ、とこのサイトでは、すべてのリストに能力が可能になります
DTEST

1
はい。ただし、それらは単に相互にシンボリックリンクであり、機能的に重複した2つの異なるプログラムではありません。それでは、それは完全な答えではなく、「補遺」(読み:コメント)のようではないでしょうか?軽度の違反に対するダウン票がありました...-
Marcin

@DTest:権利により、dmouratiは実際に数秒で私を打ち負かしました。参加する前に少なくとも2つの賛成票があったため、パーティーに明らかに遅れました。シンボリックリンクバイナリから引数への構文の変更は、通常、個別の回答ではなくコメントを使用するものです。あなたは違った肌に猫をしたい使用している場合はsedawkperlmultitailまたはninja_foo
カレブ

1
@DTest:回答を大幅に事実に基づいて編集して、元のソースを追加する自由を取りました。将来の使用には-Eが推奨されるように見えるので、それをマークしましたが、egrepを持たないディストリビューションに関するメモを削除しました。前述のディストリビューションにはegrepがあります。これは、シンボリックリンクではなく、別個のバイナリです。
カレブ

21

パイプで区切って、フィルターで除外する単語のリストを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


2
式は( ')ではなく(')で終わるべきではありませんか?
bbaja42

はい、それはタイプミスでした。スタック交換サイトはWikiのように機能するので、将来の参照のために、それはあなたがただ修正できるようなものです。
カレブ

編集は6文字以上でなければならないと思いましたか?
Sirex

あなたが高い担当者を持っていない場合、はい最小6文字がありますが、この場合1文字は非常に重要です。HTMLコメントを本文に追加することにより、変更を強制できます。キャラクターは制限にカウントされ、変更を行う理由を確認できます。
カレブ

おかげ@Calebそんなにmultitailの提案のためのそれは素晴らしいです!私はそれなしで私の人生でこれほど長く行ったとは信じられません。
sidewinderguy


3

なぜこの情報を記録したいのですか?

  • 厳密にアーカイブ用ですか?
  • ログファイル内の異なるキーワードまたはパターンに応じて、異なるスクリプトを条件付きで実行しますか?

ログファイルの内容に応じてスクリプト化された動作が必要な場合は、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ステートメントでパターンを指定し、異なる動作を指定し、ループ全体をラップすることができます。また、入力の一部を別のファイルに書き込む、または完全にドロップする非常に強力なフィルターを簡単に作成できます。または、入力内容に応じてアクションを実行し、他のスクリプトを実行します。

それでは、ログファイルをフィルタリングしたり、ログの入力に対してアクションを実行したりするのは、アーカイブの理由だけなのでしょうか。


さらに、Expectへの参照用に1つ、これはかなり前に使用したもので、完全に忘れていました。
MPi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.