[Shell] sed: ファイル内の文字列を一括置換する

シェルスクリプト内で使いそうなので、ここにカテゴライズ。

通常、出力ファイルを指定して書き換えます。

% sed 's/foo/bar/g' input.txt > output.txt

Mac OS X 上で、元ファイルを書き換えようと sed -i オプション付きで実行したところエラーに。

% sed -i 's/foo/bar/g' input.txt

プラットフォームによっては、実行できないそう。

sed -i.bak とすると、.bak 拡張子を付けてコピーを取ってから、元ファイルを書き換えてくれます。

% sed -i.bak 's/foo/bar/g' input.txt

例えばファイル内のサーバ名を一括置換する。

% perl -p -i.bak -e 's/www\./prev\.www\./g' *.tsv