我想只在文件不包含搜索时才执行命令。我搜索的行是文件的最后一行。这就是我到目前为止所拥有的:
if tail -n 1 debug.txt | [[ $( grep -q -c pass ) -eq 0 ]]; then
echo "pass"
else
echo "fail"
fi
此代码正在输出" pass"该文件是否包含该字符串。
也许有一种更简单的方法可以做到这一点。
答案 0 :(得分:1)
你可以使用awk:
if awk 'END { exit !/pass/ }' file; then
答案 1 :(得分:0)
你可以使用这个单行:
[[ $(tail -n 1 file) == *pass* ]] && echo "pass" || echo "fail"
与:
相同if [[ $(tail -n 1 file) == *pass* ]]; then
echo "pass"
else
echo "fail"
fi
有关详细信息:String contains in bash
如果您想查看exact match,请执行[ "$var" == "pass" ]
比较:
[ "$(tail -n 1 a)" == "pass" ] && echo "pass" || echo "fail"
答案 2 :(得分:0)
-q
阻止输出到标准输出; -c
只是更改了grep
写入标准输出的内容,因此它仍被-q
抑制。因此,命令替换在每种情况下都会产生一个空字符串,它(作为一个整数)总是等于0.
你想要的只是:
if tail -n 1 debug.txt | grep -q pass; then
echo "pass"
else
echo "fail"
fi