web-dev-qa-db-ja.com

sedで複数行を挿入する方法

これを追加したい

#this 
##is my 
text

行の前

the specific line 

私はこれを試しました

sed -i '/the specific line/i \
#this 
##is my 
text
' text.txt

ただし、「テキスト」のみが追加されます。

\および" "とのさまざまな組み合わせも試しましたが、何も機能しませんでした。

10

改行あり:

% sed -i '/the specific line/i #this\n##is my\ntext' foo

% cat foo
#this
##is my
text
the specific line
4
A.B.

一部の行の末尾にバックスラッシュがありません(挿入する最後の行の末尾に連続した改行があります)。

sed -i '/the specific line/i \
#this\
##is my\
text' file
% cat file
foo
the specific line
bar

% sed -i '/the specific line/i \
#this\
##is my\
text' file

% cat file
foo
#this 
##is my 
text
the specific line
bar
9
kos

置換文字列に改行とスペースが含まれている場合は、別のものを使用できます。 ls -lの出力をテンプレートファイルの途中に挿入しようとします。

awk 'NR==FNR {a[NR]=$0;next}
    /Insert index here/ {for (i=1; i <= length(a); i++) { print a[i] }}
    {print}'
    <(ls -l) text.txt

行の後に何かを挿入する場合は、コマンド{print}を移動するか、次のように切り替えます。

sed '/Insert command output after this line/r'<(ls -l) text.txt

Sedを使用して、行の前に挿入することもできます。

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
1
Walter A