grep qのオプションについて

AIでシェルスクリプトを作ってもらうと、結構下記のような使い方を多いです

if grep -q ERROR logfile; then
  echo "ERROR ...."
fi

普段は使わないので、qのオプションですが以下の意味があります

-q のオプションですが、 quiet(静かに) の略で、マッチした行は 一切表示しないで、終了ステータス(exit code)だけ返します

  • 見つかった 場合 → 終了コード(exit status)の0(true)を返す
  • 見つからない場合 → 終了コード(exit status)の1(false)を返す

以下のテスト用ファイルが作成してqのオプションの挙動を確認できます

# test.log ファイルの内容です
$ cat test.log 
aaa
bbb
ccc

# 一致した場合は「0」を返します
$ grep -q "aaa" test.log 
$ echo $?
0

# 一致しない場合は「1」を返します
$ grep -q "abc" test.log 
$ echo $?
1

シェルスクリプトで利用する場合のメリットは、grep qオプションを利用しない場合はwc -lコマンドとかでgrepの結果を変数に入れたりして処理していました。私もAIを利用するまではこの方法でした

count=$(grep -q "ERROR" test.log | wc -l)

if [ $count = 0 ]; then
  echo "ERRORなし"
fi

上記のスクリプトで、qオプションを利用すると、wc -lの箇所が不要になりますので、見た目はすっきりするのと、処理が途中で次の処理に進むので処理速度が早いです

count=$(grep -q "ERROR" test.log | wc -l)

if [ grep -q "ERROR" test.log ]; then
  echo "ERRORなし"
fi

qオプションでは終了コード(exit status)の0を返します。検索結果が見つかったのでTrueの「1」じゃと思いますが、
検索結果が見つかったのでexit statusで0を返しています

\ 最新情報をチェック /