如何在shell脚本中使用sed将'/'替换为'/\'
sed路径替换问题解决方案
你当前使用的命令存在引号嵌套混乱、正则语法错误、转义规则不符合要求的问题,无法实现预期效果,正确的实现方式如下:
最优方案:更换sed分隔符简化转义
sed的s替换命令支持自定义分隔符,选择#这类和替换内容无冲突的符号,可以避免转义斜杠的繁琐操作:
# 仅替换斜杠为/\,保留DevOps原有大小写 echo 'prakash/annam/DevOps' | sed 's#/#\\/#g'
如果需要同时把末尾的DevOps调整为小写p的Devops,可以追加替换规则:
# 完全匹配你需要的输出结果 echo 'prakash/annam/DevOps' | sed -e 's#/#\\/#g' -e 's/DevOps$/Devops/'
可选方案:使用默认/作为分隔符
如果坚持使用默认的/作为分隔符,需要额外转义正则匹配的斜杠:
# 单引号包裹版本 echo 'prakash/annam/DevOps' | sed 's/\//\\\//g' # 双引号包裹版本(shell会先解析一次转义,因此反斜杠需要多转义一层) echo 'prakash/annam/DevOps' | sed "s/\//\\\\\//g"
核心转义规则说明
- 单引号包裹的sed语句中,输出1个字面量反斜杠需要写2个连续反斜杠
\\ - 双引号包裹的语句会被shell先做一次转义解析,输出1个字面量反斜杠需要写4个连续反斜杠
\\\\
内容的提问来源于stack exchange,提问作者Saiprakash annam.a
相关产品推荐
相关产品推荐

