Bash:如果没有匹配则执行命令

时间:2014-07-24 12:18:15

标签: bash grep command match pipe

我想只在文件不包含搜索时才执行命令。我搜索的行是文件的最后一行。这就是我到目前为止所拥有的:

if tail -n 1 debug.txt | [[ $( grep -q -c pass ) -eq 0 ]]; then
   echo "pass"
else
   echo "fail"
fi

此代码正在输出" pass"该文件是否包含该字符串。

也许有一种更简单的方法可以做到这一点。

3 个答案:

答案 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