我正在用sed
替换url(\'test.png\')
url(\'/navigation/test.png\')
使用此命令可以正常工作
sed -i "s#url(\\\'#url(\\\'/navigation/#g" "main.js"
/
不过,我想排除已经以 a 开头的 url 语句url(\'/favicon.png\')
这可能吗sed
?
答案1
关键是在正则表达式中提供更多上下文:
sed -e "s#\\(url(\\\\'\\)\\(test.png\\\\')\\)#\1/navigation/\2#g"
另请注意:
- 双引号内,
'
并不特殊。 - 在双引号内,您需要编写
\\
一个\
。
答案2
您可以使用它[^/]
来匹配除斜线之外的任何字符,并将其url(\'[^/]
作为命令中的模式s
。这当然会破坏你的第一个字符,所以你必须用它创建一个子表达式,这样你就可以在替换中\([^/]\)
保留它:\1
sed -i "s#url(\\\'\\([^/]\\)#url(\\\'/navigation/\\1#g" "main.js"
另一种尝试是始终替换,但如果已经有斜杠则恢复:
sed -i "s#url(\\\'#url(\\\'/navigation/#g;s#navigation//##g" "main.js"