URL替换为sed

时间:2010-11-23 01:33:47

标签: bash sed

我想使用像这样的sed更改html文件中的所有链接

s/ <a[^>]* href="[^"]*\// <a href="\http:\/\/www.someurl.com\//g

但它不起作用。

我的链接:

<a href="http://www.mylink.com/help/rss.php" target="_top" title="RSS">RSS</a></div>

我的脚本只将mylink.com/help/rss.php更改为someurl.com/help/rss.php

我需要更改为someurl.com

2 个答案:

答案 0 :(得分:6)

在第一个斜杠之后取出空格,将所有sed斜杠更改为|之类的另一个字符以便于阅读,并从URL斜杠中删除所有转义。

sed 's|<a[^>]* href="[^"]*/|<a href="http://www.someurl.com/|g'

答案 1 :(得分:0)

你已经用\/结束了它,这意味着它会转到最后一个斜杠。删除尾随\/,它将起作用:

$ echo ' <a href="http://www.mylink.com/help/rss.php" target="_top" title="RSS">RSS</a></div>' \
> | sed 's/ <a[^>]* href="[^"]*/ <a href="\http:\/\/www.someurl.com\//g'
 <a href="http://www.someurl.com/" target="_top" title="RSS">RSS</a></div>

或者,根据Dennis关于分隔符的明智建议进行编辑(仍在删除搜索模式末尾的/,现在更加明显):

$ echo '<a href="http://www.mylink.com/help/rss.php" target="_top" title="RSS">RSS</a></div>' \
> | sed 's|<a[^>]* href="[^"]*|<a href="http://www.someurl.com/|g'
<a href="http://www.someurl.com/" target="_top" title="RSS">RSS</a></div>