Cómo insertar múltiples líneas con sed


10

Quiero agregar esto

#this 
##is my 
text

antes de la linea

the specific line 

Probé esto

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

pero solo agrega 'texto'.

También probé varias combinaciones con \y " "nada funcionó.

Respuestas:


4

Con nuevas líneas:

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

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

9

Te falta la barra diagonal inversa al final de algunas líneas (y tienes una nueva línea al final de la última línea que deseas insertar):

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

Cuando la cadena de reemplazo tiene líneas nuevas y espacios, puede usar algo más. Intentaremos insertar la salida ls -len el medio de algún archivo de plantilla.

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

Cuando desee insertar algo después de una línea, puede mover el comando {print}o cambiar a:

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

También puede usar sed para insertar antes de una línea con

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.