Обычно вы не должны использовать регулярные выражения для манипулирования содержимым 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>
. Затем при замене он меняет два тега, чтобы получить нужный вам порядок.