Cara memasukkan beberapa baris dengan sed

10

Saya ingin menambahkan ini

#this 
##is my 
text

sebelum garis

the specific line 

Saya mencoba ini

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

tetapi itu hanya menambahkan 'teks'.

Saya juga mencoba berbagai kombinasi dengan \dan " "tetapi tidak ada yang berhasil.

Paul Bernhard Wagner
sumber

Jawaban:

4

Dengan baris baru:

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

% cat foo
#this
##is my
text
the specific line
AB
sumber
9

Anda melewatkan garis miring terbalik pada akhir beberapa baris (dan Anda memiliki baris baru yang berlebihan di akhir baris terakhir yang ingin Anda masukkan):

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
kos
sumber
1

Ketika string pengganti memiliki baris dan spasi baru, Anda dapat menggunakan sesuatu yang lain. Kami akan mencoba memasukkan keluaran ls -ldi tengah beberapa file templat.

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

Saat Anda ingin sesuatu dimasukkan setelah baris, Anda dapat memindahkan perintah {print}atau beralih ke:

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

Anda juga dapat menggunakan sed untuk memasukkan sebelum baris dengan

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