在链接周围添加尖括号

时间:2014-10-27 15:22:04

标签: regex sed

我想插入< >在一条线的所有链接的两边。 我的行

总是如此
  • 链接以http://
  • 开头
  • 一行中有三个字
  • 将单词
  • 分开的空格
  • 每行以两个链接开头,然后是字符串或数字

一行可能如下所示:

http://website1.com/123123  http://homepage.net/3846  INDONESIA

我尝试了以下内容:

sed 's@^http:[^ ]+@<&>@g'

但我做错了什么:P

有人可以发布这样做的sed声明吗?

4 个答案:

答案 0 :(得分:2)

这个sed单行在这里工作:

sed 's@\bhttp://\S*@<&>@g'

使用您的数据进行测试:

kent$ sed 's@\bhttp://\S*@<&>@g'<<<"http://website1.com/123123  http://homepage.net/3846  INDONESIA"
<http://website1.com/123123>  <http://homepage.net/3846>  INDONESI

答案 1 :(得分:1)

你的主要错误是你认为“http”在字符串的开头(使用锚^),但情况并非总是如此。第二个错误是您使用必须在基本模式下转义的+,但您可以改为使用*

sed 's@\(^\| \)\(http:[^ ]*\)@\1<\2>@g'

答案 2 :(得分:1)

sed -r 's/http:[^ ]+/<&>/g'

试验:

$ echo "http://website1.com/123123  http://homepage.net/3846  INDONESIA" | sed -r 's/http:[^ ]+/<&>/g'
<http://website1.com/123123>  <http://homepage.net/3846>  INDONESIA

答案 3 :(得分:1)

我正在使用这个用于virtuoso转储:

sed -e "s@\(http://\S\+\)@\<\1\>@g" -e "s@\(^<[^>]*>  <[^>]*>  \)\([^<].*$\|<.\{0,7\}$\|<\([^h]\|h[^t]\|ht[^t]\|htt[^p]\|http[^:]\|http:[^/]\|http:/[^/]\).*$\)@\1\"\"\"\2\"\"\"@g" -e "s@\([^\.]\)[ \t]*\$@\1\.@g"

它有点臃肿,你可能会拿出一些东西,但它对我有用。