So fügen Sie mehrere Zeilen mit sed ein

10

Ich möchte das hinzufügen

#this 
##is my 
text

vor der Linie

the specific line 

Ich habe es versucht

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

aber es fügt nur 'Text' hinzu.

Ich habe auch verschiedene Kombinationen mit ausprobiert \und " "aber nichts hat funktioniert.

Paul Bernhard Wagner
quelle

Antworten:

4

Mit Zeilenumbrüchen:

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

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

Sie vermissen den abschließenden Backslash am Ende einiger Zeilen (und Sie haben eine aufeinanderfolgende neue Zeile am Ende der letzten Zeile, die Sie einfügen möchten):

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
quelle
1

Wenn die Ersatzzeichenfolge Zeilenumbrüche und Leerzeichen enthält, können Sie etwas anderes verwenden. Wir werden versuchen, die Ausgabe von ls -lin die Mitte einer Vorlagendatei einzufügen .

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

Wenn Sie möchten, dass nach einer Zeile etwas eingefügt wird, können Sie den Befehl verschieben {print}oder zu Folgendem wechseln:

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

Sie können sed auch zum Einfügen vor einer Zeile mit verwenden

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