grepからの出力を抑制して、終了ステータスのみを返すようにするにはどうすればよいですか?


57

私が持っているgrepコマンドを使用します。ファイルからキーワードを検索していますが、一致を表示したくありません。の終了ステータスを知りたいだけですgrep

回答:


69

POSIX準拠バージョンにgrepは、-qquiet用のスイッチがあります。

-q
     Quiet. Nothing shall be written to the standard output, regardless
     of matching lines. Exit with zero status if an input line is selected.

GNU grep(および場合によってはその他)では、長いオプションの同義語も使用できます。

-q, --quiet, --silent     suppress all normal output

文字列が存在します:

$ echo "here" | grep -q "here"
$ echo $?
0

文字列が存在しません:

$ echo "here" | grep -q "not here"
$ echo $?
1

6

ただの出力リダイレクトgrepにします/dev/null

grep sample test.txt > /dev/null

echo $?

1
ゼロ以外の終了コードを返すecho $?場合、これは失敗しgrepます。
WinnieNicklaus

2

grep -q <pattern>最後のプロセスを終了するための終了コードの即時チェック($?)と組み合わせる必要があります。

これを使用して、たとえば次のようなコマンドを作成できます。

uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac

オプションで次のSTDERRように出力を抑制することができます:

grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac

これはステートメントerror: 2から出力されますcase(読み取り権限がない/etc/shadowか、ファイルが存在しないと仮定します)が、エラーメッセージはgrepリダイレクトされる/dev/nullため表示されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.