我正在尝试编写一个sed脚本,以捕获文本文件中所有“裸露”的URL,并用
我的初步想法是匹配没有“或>”在前面的URL,并且在它们之后也没有<或“。然而,我在表达“在前面或后面没有”这个概念时遇到了困难,因为据我所知,sed没有向前或向后查找的功能。
示例输入:
请注意第三行没有被修改,因为它已经在
最终,我的目的是做到:
有没有一种方法可以在sed中解决这个问题,无论是通过模拟lookbehind / lookahead,还是显式匹配文件的开头和结尾?
<a href=[URL]>[URL]</a>
替换它们。我所谓的“裸露”是指不包含在锚标签内的URL。我的初步想法是匹配没有“或>”在前面的URL,并且在它们之后也没有<或“。然而,我在表达“在前面或后面没有”这个概念时遇到了困难,因为据我所知,sed没有向前或向后查找的功能。
示例输入:
[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中解决这个问题,无论是通过模拟lookbehind / lookahead,还是显式匹配文件的开头和结尾?
[^\>"]
? - SwiftMango