首页 > 解决方案 > 正则表达式 -> 检测模式 -> 将其移动到行首

问题描述

这是我第一次使用这个平台,因为我不可能找到解决方案。

我有这个 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.*.>移到行首,但没有成功。

标签: regexfilesed

解决方案


您通常不应该使用正则表达式来操作 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

演示

该解决方案仅在两个单独的组中捕获$1and $2<img>and<a>标记。然后,在替换过程中,它会交换两个标签以提供您想要的顺序。


推荐阅读