1. ホーム
  2. shell

[解決済み] ファイル内検索と置換、ファイルの上書きがうまくいかず、ファイルが空になってしまう

2022-03-16 04:47:20

質問

コマンドラインからHTMLファイルの検索と置換を実行したい。

私のコマンドは次のようなものです。

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html

これを実行し、その後ファイルを見ると、空っぽになっています。ファイルの中身が削除されてしまったのです。

再度ファイルを復元した後にこれを実行すると

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

stdout はファイルの内容で、検索と置換が実行されました。

なぜこのようなことが起こるのでしょうか?

どうすればいいですか?

このとき シェル を見ると > index.html をコマンドラインで開くと、ファイル index.html に対して 書き込み で、以前の内容をすべて消去します。

これを修正するためには -i オプションに sed を使用すると、インラインで変更を行い、元のファイルのバックアップを作成してから、インプレースで変更を行います。

sed -i.bak s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html

.bakがないと、Mac OSXなど一部のプラットフォームでコマンドに失敗します。