私は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つの引数に分けられます。