sed替换路径字符串遇到的问题

1,995 阅读1分钟

sed替换路径等参数时遇到的问题

问题描述

写脚本需要替换json串中的路径 脚本如下:

path=/root/baixw/test
​
sed -i "s/path=.*/path=$path/g" ./sed_path.txt

脚本需要替换文本中的带有路径的字符串,结果脚本执行出现错误:

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

使用bash -x调试脚本发现sed命令所在行被解析为:

sed -i "s/path=.*/path=/root/baixw/test' ./sed_path.txt

很明显了,String中有特殊字符,需要用``转义,故最后转义的结果真滴是眼睛都花了,还是不好处理啊

解决办法

经过百度,得到如下解决办法:

path=/root/baixw/test
​
sed -i "s?path=.*?path=$path?g" ./sed_path.txt

sed命令中有如下设计:当用户不方便转义字符串中的特殊字符(如/)时,sed支持使用自定义分隔符,让用户避开冲突

即可以定义不会冲突的字符即可,如上,我所替换的即为?作为分隔符,也是可以很完美的即决问题的