![sed '5i\n\n\n' myfile は最初の \n をリテラル n として挿入し、残りの 2 つは新しい行として挿入します。 3つの新しい行をすべて挿入できますか? [コピー]](https://linux33.com/image/157621/sed%20'5i%5Cn%5Cn%5Cn'%20myfile%20%E3%81%AF%E6%9C%80%E5%88%9D%E3%81%AE%20%5Cn%20%E3%82%92%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB%20n%20%E3%81%A8%E3%81%97%E3%81%A6%E6%8C%BF%E5%85%A5%E3%81%97%E3%80%81%E6%AE%8B%E3%82%8A%E3%81%AE%202%20%E3%81%A4%E3%81%AF%E6%96%B0%E3%81%97%E3%81%84%E8%A1%8C%E3%81%A8%E3%81%97%E3%81%A6%E6%8C%BF%E5%85%A5%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%203%E3%81%A4%E3%81%AE%E6%96%B0%E3%81%97%E3%81%84%E8%A1%8C%E3%82%92%E3%81%99%E3%81%B9%E3%81%A6%E6%8C%BF%E5%85%A5%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私は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つの引数に分けられます。