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

Используя sed, вставить строку выше или ниже шаблона?

Мне нужно отредактировать большое количество файлов, вставив строку или несколько строк либо прямо под уникальным шаблоном, либо над ним. Посоветуйте, пожалуйста, как это сделать, используя sed, awk, perl (или что-то еще) в оболочке. Спасибо! Пример:

some text
lorem ipsum dolor sit amet
more text

Я хочу вставить consectetur adipiscing elit после того, как lorem ipsum dolor sit amet, так что выходной файл будет выглядеть так:

some text
lorem ipsum dolor sit amet
consectetur adipiscing elit
more text
4b9b3361

Ответ 1

Чтобы добавить после шаблона: (-i для замены на месте). line1 и line2 - это строки, которые вы хотите добавить (или добавить)

sed -i '/pattern/a \
line1 \
line2' inputfile

Выход:

#cat inputfile
 pattern
 line1 line2 

Чтобы подготовить строки перед:

sed -i '/pattern/i \
line1 \
line2' inputfile

Выход:

#cat inputfile
 line1 line2 
 pattern

Ответ 2

Далее добавляется одна строка после SearchPattern.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Вставляет New Text одну строку под каждой строкой, содержащую SearchPattern.

Чтобы добавить две строки, вы можете использовать \ и ввести новую строку при вводе New Text.

POSIX sed требует \ и новую строку после функции a sed. [1] Указание текста для добавления без новой строки является расширением GNU sed (как описано на информационной странице sed), поэтому его использование не так переносимо.

[1] https://unix.stackexchange.com/questions/52131/sed-on-osx-insert-at-a-certain-line/

Ответ 3

Вставьте новый стих после данного стиха в вашей строфе:

sed -i '/^lorem ipsum dolor sit amet$/ s:$:\nconsectetur adipiscing elit:' FILE

Ответ 4

Более портативный для использования ed; некоторые системы не поддерживают \n в sed

printf "/^lorem ipsum dolor sit amet/a\nconsectetur adipiscing elit\n.\nw\nq\n" |\
    /bin/ed $filename