使用一个 grep 命令排除多个模式

Fed*_*eri 9 grep

我想知道是否有运行以下命令的最佳方法

cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
Run Code Online (Sandbox Code Playgroud)

我试过

cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

小智 10

grep 不一定需要来自管道的输入,所以你可以这样做

grep -vE '90\.192\.142\.138|PIX|Intrusion' cisco.log-20151103.log
Run Code Online (Sandbox Code Playgroud)

大写 E 开启正则表达式模式,在这种情况下需要对点进行转义。

  • 那应该是`-E`打开_Extended_正则表达式模式,允许模式的交替`|`。`grep` 没有 -E 有正则表达式,点是有意义的。问题中的点应该已经转义了,但无论如何,数字序列不太可能与其他任何内容相匹配。`grep -f` 关闭正则表达式。 (7认同)

iru*_*var 8

另外两个选项

grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
Run Code Online (Sandbox Code Playgroud)

并假设固定字符串

grep -vF '90.192.142.138
PIX
Intrusion
' cisco.log-20151103.log
Run Code Online (Sandbox Code Playgroud)