【问题标题】:Replacing a string using sed which has many different characters使用 sed 替换具有许多不同字符的字符串
【发布时间】:2013-06-22 01:15:23
【问题描述】:

我希望将变量 SERVICE 替换为字符串 $service。我用过 sed

sed "s/SERVICE/$service/g"

问题是变量$service有',[,],/,\,",?,`之类的特殊字符。$service中特殊字符的顺序是不固定的。而且只要有$service 中的 " 之类的特殊字符,sed 无法正确替换它。是否有特殊字符不会干扰 sed 替换过程的解决方案。下面给出的答案对我不起作用,它说

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

【问题讨论】:

  • 你能提供几个$service变量值的例子吗?

标签: bash shell sed


【解决方案1】:

尝试这样做:

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

例如

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

【讨论】:

  • 但是如果变量$service包含字符@呢?此外,printf '%q' 可能会用$'...' 回答一些问题。它只确保它可以被 shell 重用。
  • 例如,printf '%q' 'é'surprise。
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2020-07-28
  • 2022-12-15
相关资源
最近更新 更多