【发布时间】:2013-01-30 23:22:24
【问题描述】:
我正在尝试编写一个 sed 脚本,它将捕获文本文件中的所有“裸”URL 并将它们替换为 <a href=[URL]>[URL]</a>。 “裸”是指未包含在锚标记内的 URL。
我最初的想法是我应该匹配前面没有 " 或 > 并且后面也没有
示例输入:
[Beginning of File]http://foo.bar arbitrary text
http://test.com other text
<a href="http://foobar.com">http://foobar.com</a>
Nearing end of file!!! http://yahoo.com[End of File]
期望的输出样本:
[Beginning of File]<a href="http://foo.bar">http://foo.bar</a> arbitrary text
<a href="http://test.com">http://test.com</a> other text
<a href="http://foo.bar">http://foo.bar</a>
Nearing end of file!!! <a href="http://yahoo.com">http://yahoo.com</a>[End of File]
注意第三行没有被修改,因为它已经在<a href> 中。
另一方面,第一行和第二行都被修改了。
最后,观察所有非 URL 文本都没有被修改。
最终,我正在尝试做类似的事情:
sed s/[^>"](http:\/\/[^\s]\+)/<a href="\1">\1<\/a>/g 2-7-2013
我首先验证以下内容是否正确匹配并删除 URL:
sed 's/http:\/\/[^\s]\+//g'
然后我尝试了这个,但它无法匹配从文件/输入开头开始的 URL:
sed 's/[^\>"]http:\/\/[^\s]\+//g'
有没有办法在 sed 中解决这个问题,或者通过模拟后向/前瞻,或者显式匹配文件开头和文件结尾?
【问题讨论】:
-
你为什么用
[^\>"]? -
我正在寻找一个前面没有引号或大于号的 URL。
-
感谢关于不转义的说明。
-
更新您的问题以显示一些具有代表性的示例输入和给定该输入的预期输出 - 这对我们来说比您尝试过的更重要(尽管这也很有用)。
-
@EdMorton,观察问题已更新为样本输入和输出。
标签: regex sed awk regex-negation regex-lookarounds