Sed: Как отредактировать строку, в которой есть какое-то содержимое, которое необходимо оставить после замены? - PullRequest
0 голосов
/ 17 октября 2011

У меня есть сайт, который нужно сделать массовым редактированием, я использовал sed для выполнения большей части задачи, но добавить тег заголовка (<h1>, <h2>) настолько сложно, что я не могу придумать путь из-за:

Шаблон, который я могу гарантировать, выглядит следующим образом:

<td class="content_subhd">Heading Name</td>

Я хочу изменить его на:

<td class="content_subhd"><h2>Heading Name</h2></td>

В тех случаях, когда имя заголовка не является статичным, оно отличается на каждой странице, и поэтому я могу использовать замену из-за него.

Есть предложения?

Ответы [ 3 ]

1 голос
/ 17 октября 2011
echo '<td class="content_subhd">Heading Name</td>' | \
sed -r 's;(<td\s*class\s*=\s*"content_subhd"\s*>)([^<]+)(</td>);\1<h2>\2</h2>\3;' 
0 голосов
/ 17 октября 2011

Требуется 2 трюка:

  1. Использование группировки шаблонов \( ... \) и повторная вставка \1

  2. Используйте двоеточие в качестве разделителя шаблонов вместо /, чтобы избежать чрезмерного цитирования

Результат:

 sed 's:\(<td class="content_subhd">\)\(.*\)\(</td>\):\1<h2>\2</h2>\3:'
0 голосов
/ 17 октября 2011

А как насчет этого?

sed 's/\([^>]*>\)\(.*\)\(<.*\)/\1<h1>\2<\/h1>\3/'
         1         2     3
  1. перехватывает все до первого включительно >
  2. перехватывает Heading Name и другой возможный контент
  3. ловит все после этого
...