そのため、私はLinuxで「sed」をしばらく使用していますが、「POSIXsed」と「GNUsed」には小さな違いがたくさんあるため、OSXで使用するのに少し苦労しました。現在、特定の行番号の後にテキスト行を挿入する方法に苦労しています。 (この場合、4行目)
Linuxでは、次のようにします。
sed --in-place "4 a\ mode '0755'" file.txt
だからOSXで私はこれを試しました:
sed -i "" "4 a\ mode '0755'" file.txt
ただし、これにより、「コマンドの最後の\の後に余分な文字」エラーが発生し続けます。ここで何が問題なのですか?タイプミスはありますか?または、sedのバージョン間の別の違いを理解していませんか?
承認された回答:
厳密に言えば、sed
のPOSIX仕様 a\
の後に改行が必要です :
[1addr]a\ text
前述のように、標準出力にテキストを書き込みます。
これにより、ワンライナーを書くのが少し面倒になります。これが、a
に対する次のGNU拡張の理由である可能性があります。 、i
、およびc
コマンド:
GNU拡張として、
a
の間にある場合 空白以外の改行-\
シーケンス、次にこの行のテキスト。a
の後の最初の非空白文字から始まります。 、 textの最初の行として使用されます ブロック。 (これにより、1行の追加のスクリプトを簡単に作成できます。)この拡張機能は、i
でも機能します。 およびc
コマンド。
したがって、sed
と移植可能である 構文では、a\
の後に改行を含める必要があります 何とかして。最も簡単な方法は、引用符で囲まれた改行を挿入することです。
$ sed -e 'a\
> text'
(ここで$
および>
シェルプロンプトです)。苦痛を感じたら、bash
[1]には$' '
があります Cスタイルのエスケープを挿入するための引用構文なので、
sed -e 'a\'$'\n''text'
[1]およびmksh(r39b +)および一部の非bash Bourneシェル(例:FreeBSD9+の/bin / sh)