Я хочу добавить это
#this
##is my
text
перед строкой
the specific line
Я попробовал это
sed -i '/the specific line/i \
#this
##is my
text
' text.txt
но это только добавляет в 'тексте'.
Я также попробовал различные комбинации с \
и " "
но ничто не работало.
С новыми строками:
% sed -i '/the specific line/i #this\n##is my\ntext' foo
% cat foo
#this
##is my
text
the specific line
Вы пропускаете запаздывающую обратную косую черту в конце некоторых строк (и у Вас есть 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
Когда замещающая строка имеет новые строки и пробелы, можно использовать что-то еще. Мы попытаемся вставить вывод 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