BSD sed対GNU sedと-i

BSD sed対GNU sedと-i

Unix iMac シェルターミナル

sed -i 's/original/new/g' maths.tx  

戻りメッセージ:sed:-iはstdinでは使用できません。

答え1

Macは独自の機能を備えているsedなどのBSDバージョンのユーティリティを使用しています。date

この特定のケースでは、BSDのバージョンは次のとおりです。sed 承認するバックアップファイル拡張子はです-i任意に選択できる、GNUのようにsed

このように:

sed -i .bak 's/needle/pin/g' haystack

表示されたコマンドはファイルのすべてのインスタンスを置き換え、needle元のファイルはそのまま残りpinます。haystackhaystack.bak

sedMacの実装マニュアルから:

-i extension
         Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.
         It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in
         situations where disk space is exhausted, etc.

Linuxホストとは対照的に:

  -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

「長さ0の拡張」は「拡張なし」と同じではありません。これにより、バックアップを完全に回避できます。

sed -i '' 's/needle/pin/g' haystack

答え2

次のようにバックアップファイルを指定する必要があります。

sed -i .bak 's/original/new/g' maths.tx  

関連情報