Como inserir várias linhas com o sed

10

Eu quero adicionar isso

#this 
##is my 
text

antes da linha

the specific line 

Eu tentei isso

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

mas apenas adiciona 'texto'.

Eu também tentei várias combinações com \e, " "mas nada funcionou.

Paul Bernhard Wagner
fonte

Respostas:

4

Com novas linhas:

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

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

Você está perdendo a barra invertida no final de algumas linhas (e você tem uma nova linha excessiva no final da última linha que deseja inserir):

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

Quando a sequência de substituição tiver novas linhas e espaços, você poderá usar outra coisa. Vamos tentar inserir a saída ls -lno meio de algum arquivo de modelo.

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 você deseja inserir algo após uma linha, pode mover o comando {print}ou alternar para:

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

Você também pode usar sed para inserir antes de uma linha com

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