验证grep的结果

验证grep的结果

我正在尝试使用下面的代码来打印 Available是否存在匹配项,否则nil

grep -o 'pattern' test.log | awk '{if($0=="pattern") print "Available"; else print "nil"}'

if部分工作正常,但else如果 grep 为空,我不会得到该部分。

答案1

如果模式不匹配,则grep不会产生输出,并且awk程序没有可使用的数据。这就是为什么你永远无法nilawk代码中得到的原因。

另一种方法是

if grep -q 'pattern' test.log; then
    echo 'Available'
else
    echo 'nil'
fi

选项-q用于grep停止实用程序生成任何输出(除了可能的诊断输出)。在这里,我们不需要 的输出grep,只需要它的退出状态。


使用awk,您仍然可以根据需要进行测试,但您必须nilEND块中有条件地输出字符串:

grep -o 'pattern' test.log |
awk '/pattern/ { print "Available"; found = 1 }
     END { if (!found) print "nil" }'

END即使awk脚本没有获得任何输入,该块也会被执行。

事实上,你可以用以下方法完成整个事情awk

awk '/pattern/ { print "Available"; found = 1; exit }
     END { if (!found) print "nil" }' test.log

调用exit将调用该END块,因此我们无法删除该found变量。

相关内容