使用Sed替换含反斜杠的变量失败,求解决方案
Sed替换Windows路径失效的解决方法
问题核心在于Windows路径里的反斜杠()是sed正则的特殊转义字符,直接用原变量匹配时,sed会把单个\当成转义符而非实际字符,导致匹配不到目标内容。
解决步骤:
- 先对变量
d里的反斜杠进行转义,把每个\替换成\\(sed正则中需要两个反斜杠才能匹配一个实际的反斜杠) - 用转义后的变量执行sed替换
具体代码修改:
d="D:\X-docs\X\" # 转义反斜杠,bash参数扩展写法 d_escaped=${d//\\/\\\\} # 或者用sed转义 # d_escaped=$(printf '%s' "$d" | sed 's/\\/\\\\/g') p=$(pwd) f="${p}/" # 使用转义后的变量执行替换 sed -i "s|${d_escaped}|${f}|g" "$file"
验证一下:转义后的d_escaped会变成D:\\X-docs\\X\\,这样sed就能正确匹配文件里的D:\X-docs\X\,替换操作就能生效了。另外注意给$file加上双引号,避免路径含空格时出错。
内容的提问来源于stack exchange,提问作者Pyrodancer123
相关产品推荐
相关产品推荐

