基於 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

這個版本介於網博德的版本和半徑的版本:

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

它比前者更具可讀性,並且不會$?像後者那樣不必要地使用。

相關內容