我有很多静态HTML文件,其中包含各种域的链接。
我只需要用锚文本替换特定域的所有链接。
这是迄今为止我设法提出的命令:
dropdownParent
以下是一个如何运作的例子:
此
sed 's|<a .*example\.com.*>\(.*\)<\/a>|\1|Ig' file.html
应该成为这个:
<p>Some random text <a href="http://example.com/sample_page" title="Example Title">Anchor Text</a> | Some other random text <a href="http://example.org/">Different Anchor Text</a></p>
当每行只有一个链接时,上面的命令很有效,但是如果有多个链接只删除了最后一个锚文本,则会删除所有这些链接。
我在这里找到了一些其他类似的主题,但无法针对我的问题调整任何解决方案。当然,完全有可能我可能已经错过了一个已经存在的主题,并且我没有尝试过解决方案。如果我没有清楚地解释问题,或者我错过了提供一些重要信息,请告诉我。
//编辑:
用<p>Some random text Anchor Text | Some other random text <a href="http://example.org/">Different Anchor Text</a></p>
替换.*
后,命令如下:
[^>]*
第一个结束sed 's|<a .*example\.com[^>]*>\(.*\)<\/a>|\1|Ig' file.html
仍然存在,并且已从最后一个中删除。
以下是一个示例结果:
</a>
用<p>Some random text Anchor Text</a> | Some other random text <a href="http://example.org/">Different Anchor Text</p>
替换.*
会产生相同的结果。
答案 0 :(得分:2)
您应该注意.
匹配任何字符,它也匹配任何尖括号。
你可以&#34;脾气&#34;具有否定括号表达式.
的{{1}}:
[^<]
这意味着sed 's|<a [^>]*example\.com[^>]*>\([^>]*\)</a>|\1|Ig' file.html
标记内不能有>
。由于a
可以出现在您正在处理的内容中,我认为更安全,但更慢一点的选择是使用>
(因为[^<]
应始终用作实体)