OSXのsedは特定の行に挿入されます。

OSXのsedは特定の行に挿入されます。

だから、しばらく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拡張aiおよびコマンドで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)

おすすめ記事