我正在尝试编写一个 sed 脚本,它将捕获文本文件中的所有“裸”URL 并将它们替换为<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 中解决这个问题,或者通过模拟后向/前瞻,或者显式匹配文件的开头和文件的结尾?