1. ホーム
  2. macos

[解決済み] OS Xでのsedによるインプレース編集

2022-04-22 06:07:22

質問

OS Xでsedを使ってファイルを編集したいのですが、以下のコマンドを使っています。

sed 's/oldword/newword/' file.txt

端末に出力されます。 ファイル.txt は変更されません。 変更内容は ファイル2.txt をこのコマンドで実行します。

sed 's/oldword/newword/' file1.txt > file2.txt

しかし、私は別のファイルが欲しいわけではありません。 私が編集したいのは ファイル1.txt . どうすればいいのでしょうか?

iフラグを試してみました。 その結果、以下のようなエラーが発生します。

sed: 1: "file1.txt": invalid command code f

解決方法は?

を使用することができます。 -i フラグに、バックアップされたファイルに追加するサフィックスを指定することで、正しく動作します。あなたの例を拡張します。

sed -i.bu 's/oldword/newword/' file1.txt

この場合、2つのファイルが作成されます。 file1.txt という名前のもので、これは置換を含んでいます。 file1.txt.bu は、元のコンテンツを持つ。

軽度の危険

破壊的に元のファイルを上書きしたい場合は、以下のようなものを使用します。

sed -i '' 's/oldword/newword/' file1.txt
      ^ note the space

行の解析方法の関係で、オプションフラグとその引数の間にスペースが必要です。 引数は長さ0だからです。

この方法でsedを騙すことの危険性は、あなたのオリジナルが壊れる可能性があること以外には、私は認識していません。しかし、もしこの方法で sed がスクリプトの一部である場合、Unix Way™ は (IMHO) のように sed 非破壊で、きれいに終了することをテストし、それから余分なファイルを削除します。