macos の sed (BSD版)で -i するとバックアップファイル作られるから注意!

もしかしたら GNU sedでも起きてるかも?

事象

sed -i -e 

でファイルの中身置換したら以下のようなバックアップファイルが作られてた

  • ファイル名.ファイル拡張子-e (こっちは間違いない)
  • .!nnnnn(数字)!.ファイル名.ファイル拡張子 (こっちはもしかしたら違うかも?でも他に心当たりない)

元のファイル→ファイル名.ファイル拡張子

 

例えば、

元のファイル↓

  • index.php

作られたバックアップファイル↓

  • index.php-e
  • .!12345!index.php

両方とも作られた訳ではなかった。

 

原因

 

調べてみると、BSD版のsedで-iオプションするとバックアップファイルが作られるとのこと。

詳しくはqiitaの記事で。

gsed(つまり、GNU版)でやったつもりだったけど、シェルスクリプトでやったからBSD版が動いてたっぽい。

  • シェルスクリプトでやったからか
  • export LANG=C  してからやったからか

いずれかだろうけど、詳細には原因追ってない。

 

対応

バックアップファイルを消した。

 

macの話だけどGNUもあるかもだから(動作確認せえや)linuxカテゴリにしとく。

コメント

タイトルとURLをコピーしました