103.2標準
app.logの各行に含まれるerrorをwarnへ置換して標準出力へ表示する。
1行にerrorが複数ある場合もすべて置換し、元ファイルは変更しない。
適切なコマンドはどれか。
× 不正解
sedのsコマンドは一致部分を置換する。末尾のgフラグを付けると、各行の最初だけでなくすべての一致を置換する。
詳細解説
誤り
sed 's/error/warn/' app.log各行で最初に一致したerrorだけを置換する。
gがないため、各行の最初のerrorだけがwarnになる。
正しい
sed 's/error/warn/g' app.loggフラグにより各行の一致箇所をすべて置換し、結果を標準出力へ書く。
正解。各行に現れるerrorをすべてwarnへ置き換えて出力する。
誤り
tr 'error' 'warn' < app.log単語ではなく文字集合を1文字ずつ対応付けて変換する。
trはe、r、o、rという文字集合をw、a、r、nへ対応付け、単語errorを扱わない。
誤り
sed -n 's/error/warn/g' app.log-nで通常出力を抑え、pフラグもないため置換結果を表示しない。
置換は行われるが自動出力がなく、pフラグもないため画面へ出ない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'error then error
' | sed 's/error/warn/g'期待される結果
warn then warn理解のポイント
- s/検索/置換/が基本形
- gは行内の全一致を対象にする
- -iがなければ元ファイルを変更しない
確認時の注意
- 確認環境: GNU sed 4.x
基礎のおさらい
入力と出力
-iを付けないsedは入力を読み、処理結果を標準出力へ送るため元ファイルを変更しない。
正規表現
検索部分は正規表現として扱われる。固定文字列でも正規表現の特殊文字には注意が必要である。
問題IDKP-103-041
確認環境GNU sed 4.x
最終技術確認2026-08-12
誤り・権利侵害を報告