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)