1.03.4基礎
status.txtから、行頭がREADYで、その直後に空白が続く行だけを抽出する。
NOTREADYやREADYINGで始まる行は除外する。
適切なコマンドはどれか。
× 不正解
^は行頭を表す。[[:space:]]まで指定することで、READYを接頭辞に持つ別の状態名を除外できる。
詳細解説
正しい
grep '^READY[[:space:]]' status.txt^で行頭を固定し、READY直後の空白も要求する。
正しい。^READYで行頭を固定し、[[:space:]]によって状態名がそこで区切られることまで確認できる。
誤り
grep 'READY[[:space:]]$' status.txtREADYと空白を行末に要求するため、後続フィールドのある行に一致しない。
誤り。$が空白の直後にあるため、READYと空白だけで終わる行を探す形になり、ノード名を持つ行を外す。
誤り
grep '^[[:space:]]READY' status.txt行頭の空白に続くREADYを探し、要求と位置が異なる。
誤り。先頭に空白がある行を対象とし、READYそのものが行頭にある条件とは異なる。
誤り
grep 'READY' status.txt位置と後続文字を制限せず、NOTREADYやREADYINGにも一致する。
誤り。単なる部分一致なのでNOTREADYやREADYINGにもREADYという連続文字が含まれれば一致する。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'READY node1\nNOTREADY node2\nREADYING node3\n' | grep '^READY[[:space:]]'期待される結果
READY node1理解のポイント
- ^は行頭
- 文字クラスで空白を指定
- 接頭辞の誤一致を防ぐ
確認時の注意
- 確認環境: GNU grep 3.x / C.UTF-8ロケール
基礎のおさらい
アンカー
^と$は文字を消費せず、行内の位置を制約する。
区切りの確認
接頭辞の直後へ空白や記号を要求すると、長い名前への意図しない部分一致を防げる。
問題IDKL-101-484
確認環境GNU grep 3.x / C.UTF-8ロケール
最終技術確認2026-08-13
誤り・権利侵害を報告