1. ホーム
  2. linux

[解決済み] Macで-iオプション付きのsedコマンドは失敗するが、Linuxでは動作する。

2022-03-14 12:48:20

質問

次のような使い方に成功しました。 sed コマンドを使用して、Linuxでテキストを検索/置換することができます。

sed -i 's/old_link/new_link/g' *

しかし、私のMac OS Xで試すと、こうなります。

というのも、このような場合、"command c expects \ followed by text"

私のMacは普通にBASHシェルが動くと思ってました。 どうしたんだ?

EDITです。

ハイパフォーマンス(@High Performance)によると、これはMac sed このため、私の質問は、このコマンドを BSD でどのように再現するかということです。 sed ?

EDITです。

この原因となる実例を紹介します。

sed -i 's/hello/gbye/g' *

解決方法は?

を使用すると -i オプションを使用する場合は、バックアップ用の拡張子を提供する必要があります。

持っている場合。

File1.txt
File2.cfg

コマンド( -i'' と、その -e 新しいバージョンのMacとGNUで動作するようにするため)。

sed -i'.original' -e 's/old_link/new_link/g' *

のようなバックアップファイルを2つ作成します。

File1.txt.original
File2.cfg.original

すべてのケースで機能するsedコマンドの組み合わせを見つけることは不可能なので、バックアップファイルを作らないようにするポータブルな方法はありません。

  • sed -i -e ... - を作成するため、OS X では動作しません。 -e バックアップ
  • sed -i'' -e ... - OS X 10.6では動作しませんが、10.9以上では動作します。
  • sed -i '' -e ... - GNUで動作しない

備考 すべてのプラットフォームで動作するsedコマンドがないことを考えると、同じ結果を得るために他のコマンドを使用してみることができます。

perl -i -pe's/old_link/new_link/g' *