Regex -> обнаружить шаблон -> переместить его в начало строки - PullRequest
0 голосов
/ 24 марта 2020

Впервые я использую эту платформу, потому что я не могу найти решение.

У меня есть html код:

<img ...></img><a ...><span ...

Мне нужно это :

<a ...><img ...></img><span ...

Где ... будет содержимым шаблона (например, <img.*.</img>), потому что это будет выполнено массовым образом, и информация изменится. Файл имеет следующий формат:

<img ...></img><a ...><span ...
.....
<img ...></img><a ...><span ...
.....
<img ...></img><a ...><span ...
.....
<img ...></img><a ...><span ...

Как вы можете догадаться, мне нужно поместить тег <img> внутри тега <a>. Я попытался взять шаблон <a.*.> и переместить его в начало строки, но мне это не удалось.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

В итоге я решил это так:

sed -i -E "s/(<img.*)(<a .*.>)/\2\1/" file.txt
0 голосов
/ 24 марта 2020

Обычно вы не должны использовать регулярные выражения для манипулирования содержимым HTML, которое может быть вложенным и иметь другие сложности. Однако, предполагая, что ваши теги <img> и <a> всегда имеют только один уровень, вы можете попробовать найти и заменить в Sed следующую команду:

echo "<img ...></img><a ...><span ..." | sed 's/\(<img[^>]*><\/img>\)\(<a[^>]*>\)/\2\1/'

Это напечатает:

<a ...><img ...></img><span ...

Вот более общее решение, также более простое для чтения:

Find:    (<img[^>]*><\/img>)(<a[^>]*>)
Replace: $2$1

Демо

Это решение просто объединяет две отдельные группы $1 и $2, теги <img> и <a>. Затем при замене он меняет два тега, чтобы получить нужный вам порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...