このブログを検索

2013/04/29

sedでファイルを更新する

sedで置換などを行う時、対象のファイルを直接更新したいときは -i のオプションをつける。
つけないと、標準出力に表示されるのみで元のファイルは変更されない。
では、元のファイルにリダイレクトすればいいのではないか?
ハイフンi をつけた時と同じ結果になるように思える。
・・・
これも考えても仕方がないのでやってみた。
結果は、「元のファイルにリダイレクトすると中身が全部消える」
であった。
これも衝撃の事実だ。
なんでそうなるのだろう・・・?

# cat x.txt
i love cats.
#
# sed s/cat/dog/ x.txt
i love dogs.
#
#
# sed s/cat/dog/ x.txt > x.txt
#
# cat x.txt
#
#
# vi x.txt
#
# cat x.txt
i love cats.
#
# sed -i s/cat/dog/ x.txt
# cat x.txt
i love dogs.
#