Come inserire più righe con sed


10

Voglio aggiungere questo

#this 
##is my 
text

prima della linea

the specific line 

Ci ho provato

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

ma aggiunge solo "testo".

Ho anche provato varie combinazioni con \e " "ma niente ha funzionato.

Risposte:


4

Con le nuove linee:

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

% cat foo
#this
##is my
text
the specific line

9

Ti manca la barra rovesciata finale alla fine di alcune righe (e hai una nuova riga eccessiva alla fine dell'ultima riga che vuoi inserire):

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

1

Quando la stringa di sostituzione ha nuove righe e spazi, puoi usare qualcos'altro. Cercheremo di inserire l'output di ls -lnel mezzo di alcuni file modello.

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

Quando vuoi inserire qualcosa dopo una riga, puoi spostare il comando {print}o passare a:

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

Puoi anche usare sed per l'inserimento prima di una riga con

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.