Вы можете использовать sed для замены или удаления строк, но он также может вставлять текст в определенные места.
Вот несколько примеров.
Вставка строки перед совпадением
Обратите внимание на /i (insert) в команде sed:
$ echo "hello world" | sed "/^hello/i inserted before"
inserted before
hello world
Добавление строки после совпадения
Обратите внимание на /a (append) в команде sed:
$ echo "hello world" | sed "/^hello/a appended after"
hello world
appended after
Предоставление или добавление дополнительных новых строк с помощью \n:
Если вы используете версию sed для GNU, она работает иначе, чем версия sed для OpenBSD (macOS), из-за того, как она поддерживает \n.
Если вы хотите сделать так, чтобы это работало с обеими версиями, это можно сделать, но давайте сначала рассмотрим общий случай с версией GNU.
$ echo "hello world" | sed "/^hello/i inserted before with extra line breaks\n\n"
inserted before with extra line breaks
hello world
$ echo "hello world" | sed "/^hello/a \\\n\nappended after with extra line breaks"
hello world
appended after with extra line breaks
Во втором примере мы дважды переводим первый перенос строки.
Без этого я обнаружил, что sed возвращает буквально n только с одним из переносов строки.
Также сработало использование \ \n\n.
Я не совсем понимаю, почему мы должны делать то или другое, но это рабочее решение.
Чтобы заставить оба примера работать с версиями sed для GNU и OpenBSD, вы можете заменить \n на буквальную новую строку, например, так:
# Using single quotes instead of double is important here, so is using \ to
# break the script into multiple lines.
echo "hello world" | sed '/^hello/i inserted before with extra line breaks\
\
'
см. также: