我想插入< >在一条线的所有链接的两边。 我的行
总是如此一行可能如下所示:
http://website1.com/123123 http://homepage.net/3846 INDONESIA
我尝试了以下内容:
sed 's@^http:[^ ]+@<&>@g'
但我做错了什么:P
有人可以发布这样做的sed声明吗?
答案 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"
它有点臃肿,你可能会拿出一些东西,但它对我有用。