ファイルの内容を対象にした sed で、置換した結果を同じファイルに書き込む方法

結論

-i オプションを付ける。

実例(準備編)

sample.txt が以下のような内容だったとします。

hello, Japan
hello, world
hello, programming

この内容において、programmingRuby に置換するとします。

実例(失敗例)

-i オプションを付けない場合の単純結果は以下のとおりです。

$ sed -e "s/programming/Ruby/g" sample.txt
hello, Japan
hello, world
hello, Ruby

この内容を同じ sample.txt に書き出したいと考えたとします。とすると、こういうコマンド構成が思いつくのではないでしょうか。

$ sed -e "s/programming/Ruby/g" sample.txt > sample.txt

……しかしこれですと、sample.txt の中身は空っぽになります。

実例(成功例)

-i オプションを付けて実行すれば、望み通りの結果が得られます。以下のようにします。

$ sed -i -e "s/programming/Ruby/g" sample.txt
Powered by はてなブログ