Jak wstawić wiele linii za pomocą sed

10

Chcę to dodać

#this 
##is my 
text

przed linią

the specific line 

Próbowałem tego

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

ale dodaje tylko „tekst”.

Próbowałem również różne kombinacje z \a " ", ale nic nie działało.

Paul Bernhard Wagner
źródło

Odpowiedzi:

4

Z nowymi liniami:

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

% cat foo
#this
##is my
text
the specific line
AB
źródło
9

Brakuje końcowego ukośnika odwrotnego na końcu niektórych wierszy (i masz nadmiarowy nowy wiersz na końcu ostatniego wiersza, który chcesz wstawić):

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
źródło
1

Gdy zastępujący ciąg ma znaki nowej linii i spacje, możesz użyć czegoś innego. Spróbujemy wstawić wynik ls -lw środku pliku szablonu.

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

Jeśli chcesz wstawić coś po linii, możesz przenieść polecenie {print}lub przejść do:

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

Możesz także użyć sed do wstawiania przed linią

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
Walter A.
źródło