はじめ
に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"