1.03.4標準
trace.txtの各行について、行頭にDEBUG: とある場合だけその接頭辞を削除する。
メッセージ本文の途中に現れるDEBUG: は変更しない。
適切なコマンドはどれか。
× 不正解
sedのsコマンドでも正規表現アンカーを使える。検索側を^DEBUG: にすると本文中の同じ文字列を保護できる。
詳細解説
誤り
sed 's/DEBUG: //' trace.txt行内で最初に現れるDEBUG: を位置に関係なく削除する。
誤り。メッセージ本文に初めてDEBUG: が現れる行でも、その語を削除して内容を壊す。
誤り
sed 's/DEBUG: /NOTICE: /' trace.txt文字列を別の接頭辞へ置換し、削除しない。
誤り。行頭限定がない上にNOTICE: へ変換し、接頭辞を取り除く要件を満たさない。
誤り
sed 's/DEBUG: $//' trace.txt行全体がDEBUG: と空白で終わる特殊な行だけに一致する。
誤り。$の位置によりDEBUG: の直後が行末であることを要求し、通常の後続メッセージを持つ接頭辞には一致しない。
正しい
sed 's/^DEBUG: //' trace.txt^が置換対象を行頭のDEBUG: に限定する。
正しい。^が検索を行頭へ限定し、置換後文字列を空にすることで接頭辞だけを削除する。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'DEBUG: start\nmessage DEBUG: keep\nINFO: ok\n' | sed 's/^DEBUG: //'期待される結果
start
message DEBUG: keep
INFO: ok理解のポイント
- sは置換
- ^で行頭に限定
- 不一致行はそのまま
確認時の注意
- 確認環境: GNU sed 4.x
基礎のおさらい
sedのsコマンド
s/検索正規表現/置換文字列/は、既定で各行の最初の一致を置換する。
位置の保護
アンカーを使うと本文中の同一語を変更せず、構造上の接頭辞だけを処理できる。
問題IDKL-101-495
確認環境GNU sed 4.x
最終技術確認2026-08-13
誤り・権利侵害を報告