为html文件中的所有媒体链接添加前缀

时间:2012-04-17 06:07:56

标签: regex bash unix sed

我正在尝试在HTML文件中的所有图像之前插入绝对路径,如下所示:

<img src="/media/some_path/some_image.png"> to <img src="{ABS_PATH}/some_path/some_image.png">

我尝试了以下正则表达式来识别这些行:

egrep '(src|href)="/media([^"]*)"'

我想使用sed进行这些更改,但上面的regexp不起作用,有什么提示吗?

 sed 's#(src|href)="/media([^"]*)"##g'

sed:-e expression#1,char 32:`s'

的未知选项

编辑: 好的,现在我有:

echo 'src="/media/some_image.png"' | "egrep -o '(src|href)="/media([^"]*)"' | sed 's/(src|href)=\"\/media([^"]*)\"//g'

Sed应与字符串匹配,但不是

2 个答案:

答案 0 :(得分:2)

  1. sed不理解ERE(扩展正则表达式),只理解BRE(基本正则表达式)。 GNU sed具有“-r”选项,可以打开ERE。

  2. 你应该更改正则表达式的分隔符,因为你在正则表达式中有斜杠,如下所示:

    sed -r 's#(src|href)="/media([^"]*)"##g'
    
  3. 您几乎可以使用任何标点符号作为分隔符。

答案 1 :(得分:1)

如果将它用作模式的分隔符,则必须在sed中转义/

所以:

sed 's/(src|href)="/media([^"]*)"//g'

变为:

sed 's/(src|href)="\/media([^"]*)"//g'

也许令人困惑的是,egrep(使用扩展正则表达式)对sed和vanilla grep(使用基本正则表达式)有不同的规则,当涉及必须转义的内容时。