Как вставить несколько строк с помощью sed


10

Я хочу добавить это

#this 
##is my 
text

до линии

the specific line 

Я пробовал это

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

но это только добавляет в «текст».

Я также пробовал различные комбинации с \и , " "но ничего не получалось.

Ответы:


4

С символами новой строки:

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

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

9

Вы пропускаете обратную косую черту в конце некоторых строк (и у вас есть доступный перевод строки в конце последней строки, которую вы хотите вставить):

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

Когда строка замены содержит символы новой строки и пробелы, вы можете использовать что-то еще. Мы попытаемся вставить вывод ls -lв середине некоторого файла шаблона.

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

Когда вы хотите вставить что-то после строки, вы можете переместить команду {print}или переключиться на:

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

Вы также можете использовать sed для вставки перед строкой

sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.