我正在尝试对日志文件执行字数统计命令,如果该文件有"错误"字符串,我想采取一些措施,但我似乎无法正确将 grep 到字数统计命令转换为实数,因此它可以正确与大于零进行比较。 到目前为止,有几种变体,条件语句始终为真。
if ((grep -Ei "error" myfile.log | wc -l)) > 0; then echo 1; else echo 0; fi
首先,您可以根据程序的退出代码编写条件。 如果grep
找到匹配的行,它将成功退出:
if grep -qEi "error" myfile.log; then echo 1; else echo 0; fi
我添加了-q
标志以不打印匹配行,因为您可能不需要它。
我强烈建议使用上述解决方案,不要wc
。 但为了完整起见,这里有一些关于比较数字的不同方法的更多解释。
比较数字的一种方法是使用[ ... ]
内的-gt
("大于"(:
if [ $(grep -Ei "error" myfile.log | wc -l) -gt 0 ]; then echo 1; else echo 0; fi
您可以在help test
中阅读有关[ ... ]
内其他运算符的信息。
或者在((...))
中使用算术上下文:
if (($(grep -Ei "error" myfile.log | wc -l) > 0)); then echo 1; else echo 0; fi
请注意,在这两个示例中,我将grep ... | wc -l
包装在$(...)
子 shell 中以捕获输出。 您编写的语法不正确。