我想使用 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
如您所见,不需要的术语已被成功过滤。