Сопоставьте один и тот же шаблон n раз на одной и той же строке, используя sed - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть входной файл div.txt , который выглядит следующим образом:

<div>a</div>b<div>c</div>
<div>d</div>

Теперь я хочу выбрать все теги div и текст междуих используя sed :

sed -n 's:.*\(<div>.*</div>\).*:\1:p' < div.txt

Результат, который я получаю:

<div>c</div>
<div>d</div>

Что я действительно хочу:

<div>a</div>
<div>c</div>
<div>d</div>

Итак, вопросесть, как сопоставить один и тот же шаблон n раз на одной строке?(не предлагайте мне использовать perl или python, пожалуйста)

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Это может сработать для вас (GNU sed):

sed 's/\(<\/div>\)[^<]*/\1\n/;/^</P;D' file

Заменить </div>, за которым следует ноль или более символов, которые не являются < сами по себе и символом новой строки.Печатать только строки, начинающиеся с <.

0 голосов
/ 24 сентября 2018

Sed - это не тот инструмент для работы с HTML.

Но если вы действительно настаиваете и знаете, что на вашем входе всегда будут правильно закрытые пары тегов div, вы можете просто заменить все, что не находится внутри div.по новой строке:

sed 's=</div>.*<div>=</div>\n<div>='
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...