sedで上書き置換ができたらいいな、と

sedでファイル中の文字列を置換する時、別名のファイルへリダイレクトしてた。

これが面倒でカッコ悪くて人前ではできないので、上書き置換できたらいいと常々思っていたところで、今更ながらその方法をGoogle先生にお尋ねしたのである。

 

まず、中身が「aaa」というテキストファイル「test.txt」を用意する。

$ cat test.txt
aaa

ここで、sedに「-i」オプションを付けると、上書き置換するというのである。

$ sed -i -e "s/aaa/bbb/g" test.txt

結果はこうなる。

$ cat test.txt
bbb

さらに、「-i」オプションに文字列を付けくわえると、バックアップファイルまで作成してくれるのである。

$ sed -i".bak" "s/bbb/ccc/g" test.txt

確認するとこうなる。

$ more test.txt*
::::::::::::::
test.txt
::::::::::::::
ccc
::::::::::::::
test.txt.bak
::::::::::::::
bbb

置換前のファイルが「.bak」という指定した文字列をファイル名に加えてバックアップされる。

-iオプションと指定文字列の間にスペースを入れないのがコツ。

入れちゃうと怒られる。

$ sed -i ".bak" "s/ccc/ddd/g" test.txt
sed: -e 表現 #1, 文字数 1: 未知のコマンドです: 「.」

 

ちなみに、manにもしっかり書いてあった・・・

-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if extension supplied)