次のコマンドを実行する最善の方法があるかどうか疑問に思いました

cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion" 

試しました

cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion" 

動作しません。

回答

他の2つのオプション

grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log 

固定文字列を想定

grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log 

回答

grepは必ずしもパイプからの入力を必要としないため、次のことができます

grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log 

大文字のEは正規表現モードに切り替わり、この場合はドットをエスケープする必要があります。

コメント

  • これは、-E拡張正規表現モードをオンにする必要があります。これにより、パターンの|を変更できます。<-Eを指定しないdivid = "3c51ea2e0c">

には正規表現があり、ドットは意味があります。ドットはクエストでエスケープされている必要があります。 nですが、'とにかく番号のシーケンスが他のものと一致する可能性はほとんどありません。 grep -fは正規表現をオフにします。

  • どのような場合でもドットはエスケープする必要があります。与えられた例(OPと回答)は190.192.142.138と一致します。したがって、理想的には、IPアドレス部分を可能な限り固定するか、ログのIPアドレスの前にある区切り文字をコンマ"、"明確にするために:grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log
  • 回答

    grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log

    コメント

    • .以降これも一致する任意の文字に一致します。 90C192X142R138そしてそれはOPが求めたものではありません。特殊な(正規表現)文字はエスケープする必要があります。

    回答

    $ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion 

    コメント

    • これは問題なく機能します。'誰かが反対票を投じた理由がわかりません。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です