103.7基礎
versions.txtからservice.v1という行だけを抽出する。
ピリオドは任意の1文字ではなく、ピリオドそのものとして扱う。
適切なコマンドはどれか。
× 不正解
正規表現の.は任意の1文字に一致する。文字としてのピリオドはバックスラッシュでエスケープする。
詳細解説
誤り
grep '^service.v1$' versions.txt.が任意の1文字に一致するため、servicexv1も対象になる。
任意の1文字を許すため範囲が広すぎる。
誤り
grep -F '^service.v1$' versions.txt-Fでは^と$も文字として扱われ、行境界を表さない。
固定文字列ではアンカーも文字になる。
正しい
grep '^service\.v1$' versions.txt\.がピリオドそのもの、アンカーが行全体を指定する。
正解。ピリオドをエスケープし、行全体を固定する。
誤り
grep '^service[.]*v1$' versions.txtピリオド0文字以上なのでservicev1や複数のピリオドも許す。
ピリオドの個数を0文字以上としてしまう。
実際に確かめる
一時的な検証環境で実行できる例です。
printf '%s\n' service.v1 servicexv1 servicev1 | grep '^service\.v1$'期待される結果
service.v1理解のポイント
- .は任意の1文字
- \.は文字のピリオド
- ^と$で完全一致
確認時の注意
- 確認環境: GNU grep 3.x / LC_ALL=C
基礎のおさらい
エスケープ
正規表現のメタ文字を文字として扱うにはバックスラッシュを使う。
シェル引用
単一引用符で囲むと、バックスラッシュをgrepへそのまま渡しやすい。
問題IDKP-103-102
確認環境GNU grep 3.x / LC_ALL=C
最終技術確認2026-08-12
誤り・権利侵害を報告