
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 です。ただし、-q または --quiet または --silent オプションが使用され、選択された行が見つかった場合を除き、エラーが発生した場合の終了ステータスは 2 です。
答え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