问题描述
sed -i "s/old/new/g" file.txt
如果 new 是个路径,即字符串中含有/,这么执行会报错
初级思路
把 new 中的 / 进行转义
比如 new 为 /home/users/config.yaml
替换时
sed -i "s/old/\/home\/users\/config.yaml/g" file.txt
如果 new 是变量,
1 | new="/home/users/config.yaml" |
更好的解决方案
转义会降低可读性,只需用其他特殊字符作为sed表达式的“分隔符”(取代默认的/)即可。
例如:sed 's#\$CONFIG#/home/users/config.yaml#g',使用#代替/从而避免大量转义。
你可以尝试一下 echo aabbccdd | sed 's#aa#bb#g' | sed 's?bb?cc?g' | sed 's@cc@dd@g' | sed 's%dd%ee%g' 用任意字符作间隔
这是 sed 命令方便用户的一个特性,vim 中的 :s 也同样支持