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

时间:2013-06-20 21:16:31

标签: bash shell sed

我希望变量SERVICE被字符串$ service替换。我用sed来做它

sed "s/SERVICE/$service/g"

问题是变量$ service有特殊字符,如',[,],/,\,“,?,`等等。$ service中特殊字符的顺序不固定。只要有一个特殊的字符,如“$ service内,sed无法正确替换它。是否存在特殊字符不会干扰sed替换过程的任何解决方案。下面给出的答案对我不起作用,它说

sed: -e expression #1, char 107: unknown option to `s'

1 个答案:

答案 0 :(得分:3)

尝试这样做:

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

实施例

$ printf '%q' '*$!'
\*\$\!