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を返しています

