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

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

问题描述

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

1
2
3
bash复制代码path=/root/baixw/test

sed -i "s/path=.*/path=$path/g" ./sed_path.txt

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

1
vbnet复制代码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中有特殊字符,需要用``转义,故最后转义的结果真滴是眼睛都花了,还是不好处理啊

解决办法

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

1
2
3
bash复制代码path=/root/baixw/test

sed -i "s?path=.*?path=$path?g" ./sed_path.txt

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

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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%