[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 に置換しています。

Bash Shell command sed