macOS Montereyで複数の「-e」を含む「sed」にエラーが発生するのはなぜですか? [コピー]

macOS Montereyで複数の「-e」を含む「sed」にエラーが発生するのはなぜですか? [コピー]

macOS Montereyでこれが起こる理由は次のとおりです。

$ sed -i -e 's/<azure\/core\/internal\//</g' -e 's/<azure\/core\//</g' -e 's/<azure\/iot\/internal\//</g' -e 's/<azure\/iot\//</g' .

...次のエラーが発生します。

sed: -e: No such file or directory

ベストアンサー1

説明で述べたように、sedのBSDバージョンは-i必須パラメータを使用するため、sed -i -eこの-eパラメータはバックアップファイルのファイル名サフィックスになります。次に、コマンドの次の引数s/<azure\/core\/internal\//</g-eオプションやオプションがないため-f、これはsedスクリプトです。 (これはgrep pattern file...同様に機能し、grep -e pattern file...同じことを行います。)

標準的な動作は、オプションが最初のコマンドライン引数として表示される必要があることです。したがって、最初の非オプションの後にダッシュで始まっても、残りはオプションとして解釈されません。したがってsed-e

これはGNUでも異なります。たとえば、これとls dir -l同じですls -l dirが、標準ではなく、MacのBSD sedもそれをサポートしていません。 GNUでは、sedスクリプトとファイル名としてオプションとしてsed foo -e bar認識されます。しかし、標準的な解釈によると、スクリプトとファイル名になります。-ebarfoofoo-e-bar


問題を解決する-iと、残りは所定の位置になります。 Macでバックアップファイルなしでオプションを使用するには、次のように-iします。

sed -i '' -e something -e something file...

これはsed -i.baksedバージョンのいずれかで動作し、バックアップサフィックスを.baksed -i .bak

おすすめ記事