grep の結果に基づいてエコーする

grep の結果に基づいてエコーする

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"; figrepコマンドの後に追加するだけです

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

前者よりも読みやすく、$?後者のように不必要に使用されません。

関連情報