MacとLinuxでのsedコマンドの違い


はじめ
にMacとLinuxでのsedコマンドの使用には特定の違いがあります。主な理由は、Macでバックアップ形式を指定する必要があり、Macで挿入するには改行を挿入する必要があるためです。

無視できないバックアップ形式

# linux下success
sed -i 's/hello/world/g' hello.text

上記のコード行はLinuxで実行できます。役割は、hello.textファイルにあるhelloをworldで置き換え、変更されたコンテンツをファイルに直接保存することです。
Macで上記のコマンドを実行すると、このコード行がエラーを報告することがわかります。その理由は、Macではsedコマンドがファイルを直接操作する場合、バックアップの形式を指定する必要があるためですが、Linuxではそのような要件はありません。

# mac下success
sed -i '' 's/hello/world/g' hello.php

上記のコードに示すように、バックアップ形式を指定するには、-iの後に引用符のペアを追加します。バックアップが不要な場合は、引用符の内容を空にすることができます。

テキストを挿入するには改行が必要です

sed -i '' '1i\ hello ' hello.txt

上記のコード行の機能は、helloをファイルに挿入することです。これはLinuxで正常に実行できますが、Macではエラーを報告します。
その理由は、sedコマンドを使用してファイルにテキストを挿入する場合、1iの後に改行を挿入する必要があるためです。正しいコードは次のとおりです。
たとえば、ターミナルでこのコマンドを使用する場合、正しいコードは次のとおりです。1iの後、Enterキーを押してから、次のコマンドの入力を続けます。

sed -i '' '1i\
hello' hello.php

Rubyを使用してシェルスクリプトを呼び出すため、文字列にコマンドを記述します。Rubyでsedを使用してテキストを挿入するコードは次のとおりです。

system "sed -i '' '1i\\'$'\n''hello' hello.php"

おすすめ

転載: www.cnblogs.com/xuange306/p/12702313.html