Используя 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
Ответы
Ответ 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