[sed] 1行の中で最後に一致した文字列だけ置換する
作成日: 2026年09月28日
1行の中で最後に一致した文字列だけを置換するには、最後の置換対象より前の部分を .* でまとめて一致させます。
printf 'foo foo foo\n' | sed 's/\(.*\)foo/\1bar/'
実行結果は下記のとおりです。
foo foo bar
.* は、後ろの foo が一致する範囲で、できるだけ後ろまでの文字列に一致します。そのため、最後の foo より前の部分が \(.*\) に入ります。
\1 は、\(.*\) に一致した部分を表します。置換後の文字列を \1bar とすることで、最後の foo より前の部分をそのまま残し、最後の foo だけを bar に置換しています。