我想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
命令时,它与模式不匹配。