2

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

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

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

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

我想使用 sed 进行这些更改,但是上面的正则表达式不起作用,有什么提示吗?

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

sed: -e 表达式 #1, char 32: `s' 的未知选项

编辑:好的,现在我有:

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

sed 应该匹配字符串,但它不匹配

4

2 回答 2

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

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

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

您几乎可以使用任何标点符号作为分隔符。

于 2012-04-17T06:12:53.243 回答
1

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

所以:

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

变成:

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

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

于 2012-04-17T06:12:07.183 回答