我需要一个单行代码,无论 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