1.03.4標準
alerts.logから、行頭がCRITICAL:またはALERT:の行を抽出する。
GNU grepの拡張正規表現を使用する。
適切なコマンドはどれか。
× 不正解
grep -Eは拡張正規表現を選び、(A|B)で複数文字列の選択を簡潔に表せる。egrepは同等の旧来名である。
詳細解説
正しい
grep -E '^(CRITICAL|ALERT):' alerts.log-Eが括弧と|を拡張正規表現のグループ化と選択として扱う。
正しい。-EのEREでは括弧が選択範囲をまとめ、|がCRITICALまたはALERTを表す。
誤り
grep '^(CRITICAL|ALERT):' alerts.log基本正規表現では未エスケープの括弧と|を選択構文として扱わない。
誤り。BREのままでは未エスケープの括弧と|がEREと同じ構文にならず、意図した2語選択を作らない。
誤り
grep -F '^(CRITICAL|ALERT):' alerts.log-Fは正規表現記号を固定文字列として検索する。
誤り。-Fは^、括弧、|まで文字として検索するため、ログ行の接頭辞へ一致しない。
誤り
grep '^[CRITICAL|ALERT]:' alerts.log角括弧は単語の選択ではなく1文字の文字クラスになる。
誤り。文字クラスは複数文字の語を選べず、CやAなど1文字の直後にコロンがある行を探す。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'INFO: ok\nALERT: load\nCRITICAL: disk\n' | grep -E '^(CRITICAL|ALERT):'期待される結果
ALERT: load
CRITICAL: disk理解のポイント
- -EはERE
- |は選択
- 括弧で範囲をまとめる
確認時の注意
- 確認環境: GNU grep 3.x
基礎のおさらい
BREとERE
grepはBRE、grep -EはEREを使う。egrepはgrep -Eと同等だが、新しいスクリプトではgrep -Eが明確である。
選択演算子
EREのA|Bは左右どちらかへ一致し、括弧で他の要素との結合範囲を指定できる。
問題IDKL-101-488
確認環境GNU grep 3.x
最終技術確認2026-08-13
誤り・権利侵害を報告