我正在尝试在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应与字符串匹配,但不是
答案 0 :(得分:2)
sed不理解ERE(扩展正则表达式),只理解BRE(基本正则表达式)。 GNU sed具有“-r”选项,可以打开ERE。
你应该更改正则表达式的分隔符,因为你在正则表达式中有斜杠,如下所示:
sed -r 's#(src|href)="/media([^"]*)"##g'
您几乎可以使用任何标点符号作为分隔符。
答案 1 :(得分:1)
如果将它用作模式的分隔符,则必须在sed中转义/
。
所以:
sed 's/(src|href)="/media([^"]*)"//g'
变为:
sed 's/(src|href)="\/media([^"]*)"//g'
也许令人困惑的是,egrep(使用扩展正则表达式)对sed和vanilla grep(使用基本正则表达式)有不同的规则,当涉及必须转义的内容时。