Bash 使用具有许多不同字符的sed替换字符串

Bash 使用具有许多不同字符的sed替换字符串,bash,shell,sed,Bash,Shell,Sed,我希望变量服务被字符串$SERVICE替换。我用过sed sed“s/SERVICE/$SERVICE/g” 问题在于变量$service具有特殊字符,如“,[,],/,\,”,?,`和类似字符。$service中特殊字符的顺序是不固定的。并且每当$service中有一个特殊字符,如“内有”,sed都无法正确替换它。是否存在特殊字符不会干扰sed替换过程的解决方案。它说,下面给出的答案对我不起作用 sed: -e expression #1, char 107: unknown option t

我希望变量服务被字符串$SERVICE替换。我用过sed

sed“s/SERVICE/$SERVICE/g”

问题在于变量$service具有特殊字符,如“,[,],/,\,”,?,`和类似字符。$service中特殊字符的顺序是不固定的。并且每当$service中有一个特殊字符,如“内有”,sed都无法正确替换它。是否存在特殊字符不会干扰sed替换过程的解决方案。它说,下面给出的答案对我不起作用

sed: -e expression #1, char 107: unknown option to `s'
尝试这样做:

sed "s@SERVICE@$(printf '%q' "$service")@g"
  • @
    是另一个修饰符,可以是任何字符
  • printf“%q”
    为shell转义给定字符串:


但是如果变量
$service
包含字符
@
,该怎么办?另外,
printf“%q”
可能会用
$“…”
回答某些问题。它只确保shell可以重用它。例如,
printf“%q'é”
shopping。您能否提供几个
$service
变量值的示例。
$ printf '%q' '*$!'
\*\$\!