Мне потребовалось некоторое время, чтобы понять, как это сделать, поэтому отправляйте сообщения, если кто-то ищет то же самое.
Как вставить новую строку/строку после строки с помощью sed
Ответ 1
Чтобы добавить новую строку после шаблона, вы также можете сказать:
sed '/pattern/{G;}' filename
Цитата Руководство GNU sed:
G
Append a newline to the contents of the pattern space, and then append the contents of the hold space to that of the pattern space.
EDIT:
Кстати, это происходит в sed one liners:
# insert a blank line below every line which matches "regex"
sed '/regex/G'
Ответ 2
Эта команда sed:
sed -i '' '/pid = run/ a\
\
' file.txt
Находит строку с помощью: pid = run
file.txt перед
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
; Error log file
и добавляет строку после этой строки внутри файла file.txt
file.txt после
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
; Error log file
Или если вы хотите добавить текст и строку:
sed -i '/pid = run/ a\
new line of text\
' file.txt
file.txt после
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
new line of text
; Error log file
Ответ 3
Простая подстановка хорошо работает:
sed 's/pattern.*$/&\n/'
Пример:
$ printf "Hi\nBye\n" | sed 's/H.*$/&\nJohn/'
Hi
John
Bye
Чтобы быть стандартным, замените \n на обратную косую черту:
$ printf "Hi\nBye\n" | sed 's/H.*$/&\
> John/'
Hi
John
Bye
Ответ 4
sed '/pattern/a\\r' file name
Он добавит возврат после шаблона, а g
заменит шаблон пустой строкой.
Если в конце файла добавить новую строку (пробел), используйте следующую команду:
sed '$a\\r' file name