sed
コマンドによる出力結果を、自分自身のファイルに書き戻そうとしてリダイレクトを使うと、ファイルの中身が消えてしまいます(これは sed
に限ったことではなく、Linux の一般的な振る舞いですが)。
例えば、下記のように実行すると、input.txt ファイルの内容は空っぽになってしまいます。
$ sed 's/aaa/bbb/' input.txt > input.txt
このようなことを行いたい場合は、sed
コマンドの -i
オプションを指定すると自分自身のファイルに結果を書き戻すことができます。
$ sed -i 's/aaa/bbb' input.txt
元のファイルのバックアップを取っておきたい場合は、-i
オプションに続けて拡張子を指定します。
$ sed -i.bak 's/aaa/bbb' input.txt
$ ls
input.txt input.txt.bak
拡張子のドットは省略できません。また、-i
の後ろにスペースを入れることもできないので注意してください。