使用 sed [重复] 替换包含反斜杠的字符串

Posted

技术标签:

【中文标题】使用 sed [重复] 替换包含反斜杠的字符串【英文标题】:Replace a string containing backslash using sed [duplicate] 【发布时间】:2013-06-18 22:49:37 【问题描述】:

我想使用 sed 将变量 SERVICE 替换为包含反斜杠的字符串 $service。我做了以下

sed "s/SERVICE/`printf '%q' "$service"`/g"

使用这个我得到替换的字符串为

b_a^c_b_\]Wdd[]X\[X\[W206C?2@,.\\,A@2AW!w6"|

随心所欲

b_a^c_b_\]Wdd[]X\[X\[W206C?2@,.\,A@2AW!w6"|

还有其他方法吗。 PS(字符串$service有很多不同的特殊字符)

【问题讨论】:

$service 的价值是什么? 如何设置服务变量的值?您的示例对我来说很好用(我做了 service="a\a",并且替换的字符串中只出现了一个反斜杠)。 尝试使用单引号 $service 的值为b_a^c_b_]Wdd[]X[X[W206C?2@,.,A@2AW!w6"| 但是你的 $service 值中没有反斜杠! 【参考方案1】:

你也可以不使用sed,而只是像这样使用bash:

while read -r; do
    echo "$REPLY//SERVICE/$service"
done

【讨论】:

以上是关于使用 sed [重复] 替换包含反斜杠的字符串的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本如何把反斜杠替换成斜杠反斜杠,比如2014\/5\/10变成2014/5/10,急用谢谢!

linux sed 如何替换字符串中的反斜杠\

linux中sed命令如何运用‘\ ’ 反斜杠

当下一个字符为“t”时,使用sed命令转义反斜杠

sed命令替换字符包含斜杠,引号的处理方法

用正斜杠“/”动态替换反斜杠“\”[重复]