sed '5i\n\n\n' myfile は最初の \n をリテラル n として挿入し、残りの 2 つは新しい行として挿入します。 3つの新しい行をすべて挿入できますか? [コピー]

sed '5i\n\n\n' myfile は最初の \n をリテラル n として挿入し、残りの 2 つは新しい行として挿入します。 3つの新しい行をすべて挿入できますか? [コピー]

私はBashスクリプトを作成していますが、GNU sedを使用してファイルに行を挿入すると、最初の新しい行はリテラルnとして挿入され、残りは新しい行に挿入されます。コマンドは次のとおりです。

sed '5i\n\n\n' myfile

出力は次のとおりです。

n


示されているように、出力の最初の行には含まれてはならない「n」が含まれています。この動作で何を見逃していますか? sedに '\ n'を使用して新しい行のみを挿入させることはできますか?ありがとうございます。

答え1

これ標準sedインサートはい

5i\
text here...

(バックスラッシュを含む) GNU sed拡張command と同じ行にあるテキストを許可しますiが、後ろにバックスラッシュがある場合は、通常どおりiコマンドを終了すると解釈されます。しかし、それでも新しい行に移動することを強制するわけではありません。あなたはそれを使用することができます

5i\\n\n\n

一緒にしてください。これはエスケープされたバックスラッシュではなく、すぐ隣にある2つの異なるタイプのバックスラッシュです。この動作は文書化されていないように見えますが、コマンドとバージョンの間で一貫しています。


他のGNU拡張を使用すると、より明確になります。

sed -e '5i\' -e '\n\n\n'

-eあいまいさを避けるために、コマンドとテキストは2つの引数に分けられます。

関連情報