我想运行这个正则表达式https://regex101.com/r/9LJAjZ/1使用 sed 或 perl 替换文件的内容。
如果我是正确的,这将永远不会与 sed 一起工作,因为 sed 总是贪婪的。但是我怎样才能让这个正则表达式与 perl 一起工作呢?
这是我到目前为止所得到的:
perl -pi.bak -e "s#url\(\\[\'|\"]((?!data:|\/).*)\\[\'|\"]\)#url\(\\\'/prefix/\1\\\'\)/#g" file.js
输入文件示例:
url(\'font-awesome.woff\') url(\'bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')
示例输出
url(\'/prefix/font-awesome.woff\') url(\'/prefix/bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')
答案1
稍微修改一下你的命令:
$ perl -pe 's#(url\()(\\['\''"])((?!data:|/).*?\2\))#$1$2/prefix/$3#g' foo
url(\'/prefix/font-awesome.woff\') url(\'/prefix/bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')
正则表达式(我将其放在单引号中作为使用的好处\'
)\"
是:
s#(url\()(\\['"])((?!data:|/).*?\2\))#$1$2/prefix/$3#g
_____ ______ __________________
$1 $2 \2 $3
url( \' ...\')
\" ...\")
.*?
是惰性的,并且在替换中,使用$1
、$2
等引用组(与模式中的 、 等不同\1
)\2
。