根据 grep 结果进行 echo

根据 grep 结果进行 echo

我需要一个单行代码,无论 grep 是否找到任何结果,它都显示“是”或“否”。

我玩过grep -c,但没有成功。

答案1

怎么样:

uptime | grep user && echo 'yes' || echo 'no'
uptime | grep foo && echo 'yes' || echo 'no'

然后你就可以安静了:

uptime | grep --quiet user && echo 'yes' || echo 'no'
uptime | grep --quiet foo && echo 'yes' || echo 'no'

来自 grep 手册页:

退出状态

通常,如果找到选定的行,则退出状态为 0,否则为 1。但如果发生错误,则退出状态为 2,除非使用了 -q 或 --quiet 或 --silent 选项并找到了选定的行。

答案2

不确定你说的“一行”是什么意思,对我来说,这是一个“一行”

; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi只需在 grep 命令后添加

bash$ grep ABCDEF /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
No
bash$ grep nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
nameserver 212.27.54.252
Yes

如果要抑制 grep 结果,请向 grep 添加 -q 标志

bash$ grep -q nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
Yes

答案3

此版本介于Weboide 的版本和半径的版本:

if grep --quiet foo bar; then echo "yes"; else echo "no"; fi

它比前者更具可读性,并且不需要$?像后者那样不必要地使用。

相关内容