GNU/Linux >> Linux の 問題 >  >> Linux

特定の行でOsxインサートをSedしますか?

そのため、私は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)


Linux
  1. コマンド ラインで文字列を 16 進数に変換する

  2. ファイルの先頭にテキストを挿入する方法は?

  3. 最初の一致でのみ挿入する sed

  1. sed 特定の行にスペースを含む挿入行

  2. sed - 一致後に X 行の後に行を挿入する

  3. Bash履歴ファイルから特定の行を削除します

  1. Sedテキストエディタの使い方を学ぶ

  2. Vimの各行の先頭にテキストを挿入する方法

  3. 特定の文字列と次の行を含む行を削除しますか?