だから、しばらくLinuxでは「sed」を使ってきましたが、OSXでは「POSIX sed」と「GNU sed」の間に微妙な違いが多く、使用するのに少し難しかったです。現在、特定の行番号の後にテキスト行を挿入する方法が困難です。 (この場合は4行目)
Linuxでは、次のようにします。
sed --in-place "4 a\ mode '0755'" file.txt
そのため、OSXでは次のことを試しました。
sed -i "" "4 a\ mode '0755'" file.txt
ただし、これは「コマンドの終わりに\の後に追加の文字」エラーが発生し続けます。ここで何が起こっているのかというアイデアはありますか?私はタイプミスを出しましたか?それとも私が理解していないsedバージョンの間に別の違いがありますか?
ベストアンサー1
厳密に言えば、POSIX仕様sed
その後、梱包する必要がありますa\
。
[1addr]a\ text
前述のように標準出力にテキストを書き込みます。
これにより、気の利いた言葉を書くのは少し痛いです。おそらく、次の理由からです。GNU拡張a
、i
およびコマンドでc
:
GNU 拡張として、
a
改行と改行の間に一連の空白以外のものがある場合、次\
の空白ではなく最初の文字で始まるテキストa
行テキスト詰まった。 (これは1行の追加スクリプトの作成を簡単にすることができます。)この拡張はi
コマンドと一緒に使用することもできますc
。
したがって、構文と互換性を持たせるには、構文のsed
後に改行文字を追加する必要がありますa\
。最も簡単な方法は、引用した改行文字を挿入することです。
$ sed -e 'a\
> text'
(シェルプロンプトはどこに$
あり、どこにありますか?)>
痛みをbash
感じたら[1]$' '
Cスタイルのエスケープを挿入する引用構文なので、単に使用してください。
sed -e 'a\'$'\n''text'
[1] バージョン 2.0 (1996) および ksh93 (該当するソース) 以降、zsh(3.1.5+)、mksh(r39b+)、および一部の Almquist シェル派生物 (例: FreeBSD 9+ の /bin/sh)