Як вставити кілька ліній з 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.