如何用Shell脚本替换文件中含斜杠的指定配置行?
解决sed替换含斜杠路径的问题
你遇到的问题核心是sed默认用斜杠/作为命令分隔符,而你要匹配的路径里满是斜杠,导致sed把这些斜杠当成了命令的分隔标记,直接打乱了语法逻辑,所以命令执行失败。下面给你两种实用的解决办法:
方法1:更换sed的分隔符
选一个路径里没有的字符(比如#或|)作为新的分隔符,这样就不用转义路径里的斜杠,写起来更清爽:
sed -i '#path=/home/new/abc/xyz#c\path=/arun/old' 你的目标文件.txt
如果是在macOS(BSD sed)环境下,-i选项需要额外加一个空参数:
sed -i '' '#path=/home/new/abc/xyz#c\path=/arun/old' 你的目标文件.txt
方法2:转义路径里的所有斜杠
把要匹配的路径中每个/都转义成\/,让sed识别这是路径的一部分而非命令分隔符:
sed -i '/path=\/home\/new\/abc\/xyz/c\path=/arun/old' 你的目标文件.txt
同样,macOS环境下要调整为:
sed -i '' '/path=\/home\/new\/abc\/xyz/c\path=/arun/old' 你的目标文件.txt
额外小技巧
如果你的需求只是修改所有以path=开头的行,不管原来的路径是什么,还可以简化命令,匹配范围更灵活:
sed -i '/^path=/c\path=/arun/old' 你的目标文件.txt
内容的提问来源于stack exchange,提问作者Arun Munirathinam
相关产品推荐
相关产品推荐

