想要在日志文件中搜索“error”字符串的出现,但有些字符串中含有“error”(我们应该忽略这些字符串)

想要在日志文件中搜索“error”字符串的出现,但有些字符串中含有“error”(我们应该忽略这些字符串)

我想使用 if 条件在日志文件中搜索“error”的出现,并打印日志文件中是否存在错误。如果不存在,则应打印未发现错误。这里的问题是,在我的日志文件中,我有一些单词以 error 作为子字符串,我想忽略这些单词,因为它们不算作要考虑的错误。

Words are :
"LocalErrorPagePolicy"
"ErrorMapping"
"CustomErrorPagePolicy"
"error=ForceYes"

And also i want to avoid one line where error occurs:
Error details may be seen in the file:

还应考虑其余的错误发生情况。

任何帮助,不胜感激!

我试过grep -v "string"文件名,但是不起作用。

答案1

一种(非常粗略的)方法是 grep 所有“错误”发生的情况: grep -i "error" FILENAME

解释:

  • -i: 滤清器盒敏感(RegEx 等同于/i标志)
  • "error":过滤术语“错误”
  • FILENAME:要搜索的文件

然后过滤掉你不想要的:

grep -Eiv "(LocalErrorPagePolicy|ErrorMapping|CustomErrorPagePolicy|error=ForceYes|Error details may be seen in the file:)" FILENAME

解释:

  • -Eiv:多个参数的连接,相当于grep -E -i -v
  • -E:将模式解释为扩展正则表达式(ERE,man grep有关详细信息,请参阅)
  • -i: 滤清器盒敏感的
  • -v:反转匹配的方向,选择不匹配的行。

对于模式:

  • (): 括号创建匹配组
  • |:管道字符充当逻辑or

这分解为“查找 TERM1 或 TERM2 或 ... 或 TERMX”,然后丢弃找到这些术语的行。


如果我们把它们加在一起,我们得到:

grep -i "error" FILENAME | grep -Eiv (LocalErrorPagePolicy|ErrorMapping|CustomErrorPagePolicy|error=ForceYes|Error details may be seen in the file:)"


为了测试这一点,我创建了一个非常小的虚拟文件:

LocalErrorPagePolicy
ErrorMapping
CustomErrorPagePolicy
error=ForceYes
Error details may be seen in the file:
Stackoverflowerror
I like errors
error error
LocalErrorErrorError
CustomErrorErrorPolicy
error=errorYes
I am a successfully output!

应用 -command 后的结果grep

Stackoverflowerror
I like errors
error error
LocalErrorErrorError
CustomErrorErrorPolicy
error=errorYes

如您所见,不需要的术语已被成功过滤。

相关内容