grep -v 过滤器不起作用

grep -v 过滤器不起作用

我想grep通过使用grep -v选项来过滤结果。但使用特定模式时,输出没有差异。 log.log的内容:

ERROR
error
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

当我运行命令时:

egrep -wi 'error|exception' /temp/log.log | grep -v 'error'

给出输出:

ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

但如果我运行命令:

egrep -wi 'error|exception' /temp/log.log | grep -vi '<STATUS>ERROR</STATUS>'

它仍然给出输出:

ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

而我期待的是:

ERROR
EXCEPTION
exception
<MessageType>ERROR</MessageType>

为什么会发生这种情况?

答案1

出现该问题的原因是egrep -w 'error|exception'.此命令在模式之前和之后添加特殊字符(即错误或异常),以在 grep 结果中突出显示这些模式。

正如哈拉尔德所说。 “ERROR”模式与 grep 输出语句不匹配,因为 grep 输出中 STATUS 标记之间的“ERROR”有一些由标志添加到其中的特殊字符-w

因此,当egrep的结果发送到grep -v命令时,它与模式不匹配。

相关内容