我想知道是否有可能(建议可能是更好的词)使用sed将URL转换为文档中的HTML超链接。因此,它会寻找以下内容:
http://something.com
并用
替换它们<a href="http://something.com">http://something.com</a>
有什么想法?电子邮件地址也可以这样做吗?
答案 0 :(得分:3)
这可能有用。
sed -i -e "s|http[:]//[^ ]*|<a href=\"\0\">\0</a>|g" yourfile.txt
这取决于后跟空格的网址(并非总是如此)。
您可以使用。
进行类似的电子邮件sed -i -e "s|\w+@\w+\.\w+(\.\w+)?|<a href=\"mailto:\0\">\0</a>|g" yourfile.txt
那些可能会让你开始。我建议在进行内联更改之前不要使用-i选项来测试输出。
答案 1 :(得分:0)
你可以使用awk
awk '
{
for(i=1;i<=NF;i++){
if ($i ~ /http/){
$i="<a href=\042"$i"\042>"$i"</a>"
}
}
} 1 ' file
输出
$ cat file
blah http://something.com test http://something.org
$ ./shell.sh
blah <a href="http://something.com">http://something.com</a> test <a href="http://something.org">http://something.org</a>
答案 2 :(得分:0)
sed -i.bakup 's|http.[^ \t]*|<a href="&">&</a>|' htmlfile
答案 3 :(得分:0)
虽然你可以使用sed,但我通常只会使用sed,如果我需要一些只写的东西(也就是说,它只需要工作而不需要维护)。
我发现Python正则表达式库更易于访问(并且能够添加更强大的构造)。
import re
import sys
def href_repl(matcher):
"replace the matched URL with a hyperlink"
# here you could analyze the URL further and make exceptions, etc
# to how you did the substitution. For now, do a simple
# substitution.
href = matcher.group(0)
return '<a href="{href}">{href}</a>'.format(**vars())
text = open(sys.argv[1]).read()
url_pattern = re.compile(re.escape('http://') + '[^ ]*')
sys.stdout.write(url_pattern.sub(href_repl, text))
就个人而言,我发现更容易阅读和维护。
答案 4 :(得分:0)
该文件包含以下内容
以下代码将给出 正确的输出
sed -r 's/(.*)/\<a href="\1">\1\<\/a\>/' file