Подтвердить что ты не робот

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

Мне потребовалось некоторое время, чтобы понять, как это сделать, поэтому отправляйте сообщения, если кто-то ищет то же самое.

4b9b3361

Ответ 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