我想用grep计算文件中检测到的字符串,排除特定短语

时间:2017-07-27 05:45:42

标签: grep

您好我正在尝试在日志文件中搜索以下字词,并将匹配数作为数字分配给变量。

errors
error
fail
failure
can't

但是如果它的前面是“No”

,我不想匹配错误或错误

如果“无错误”则忽略错误,如果“无错误”

则忽略错误

这是我到目前为止所拥有的

ErrorCheck=$(grep -vi "No errors" $LOGFILE | grep -ciE "error|fail|can't" $LOGFILE)

不幸的是,它不适合我,任何建议都会很棒。

PS我正在使用运行busybox shell的微内核,所以我有一个稍微精益的环境来工作。

欢迎所有意见和建议。

感谢您的意见。

1 个答案:

答案 0 :(得分:0)

嗯,我认为一个问题是" -v" grep的标志基本上会省略包含' No errors'的整行。或您指定的任何其他字符串。因此,如果一行包含"没有失败"和"不能"#34;例如,您遇到了问题。

一种可能的(有点janky)方法可能是将值存储在三个不同的变量中:NUM_COUNTED减去NUM_NOTS = ErrorCheck,它应该考虑到"没有失败"和同一行中的实际故障指示器。

ShowError.aspx

或者,这似乎给出了(大多数是准确的)结果:

NUM_COUNTED=grep -ciF 'error
fail
can't' $LOGFILE
NUM_NOTS=grep -ciF 'no error
no fail' $LOGFILE
ErrorCheck=`expr $NUM_COUNTED - $NUM_NOTS`

-F标志只是告诉grep查找换行符分隔的字符串文字(错误,失败和可以' t。)

希望这有帮助。