sed и awk: как заменить раздел файла на другой контент? - PullRequest
6 голосов
/ 30 ноября 2010

Файл a.html:

<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

Я хочу заменить средний текст другим текстом, как этого добиться с помощью инструментов sed / awk / other?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2010

Если текст между строками маркера состоит из одной или нескольких строк:

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/aSome text to insert' a.html

Команда i может быть изменена на команду r и имя файла для чтения текста изфайл.

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/r filename' a.html
2 голосов
/ 30 ноября 2010

Если у вас есть новый текст баннера в другом файле:

awk -v new_file=new_banner.txt '
    /!--TEMPLATE:/ {print; system("cat " new_file); banner=1; next}
    /!--TEMPLATE-END:/ {banner=0}
    banner {next}
    {print}
' a.html
1 голос
/ 30 ноября 2010
sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/'

Input

$ cat sedbanner
<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

Выход

$ sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/' ./sedbanner
<!--TEMPLATE: banner-->
lalala
<!--TEMPLATE-END: banner-->

Если вам нравится вывод, замените sed -r на sed -ri, чтобы сделать его редактированием на месте

...