Как вставить несколько строк с sed

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

#this 
##is my 
text

перед строкой

the specific line 

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

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

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

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

10
задан 26 November 2015 в 01:54

3 ответа

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

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

% cat foo
#this
##is my
text
the specific line
4
ответ дан 23 November 2019 в 04:28

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

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
9
ответ дан 23 November 2019 в 04:28

Когда замещающая строка имеет новые строки и пробелы, можно использовать что-то еще. Мы попытаемся вставить вывод 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
1
ответ дан 23 November 2019 в 04:28

Другие вопросы по тегам:

Похожие вопросы: