我正在尝试使用sed替换文件中的路径。
sudo sed 's/a/b/g' -i /tmp/test
但变量是
a = /var/lib and
b = /data/lib
如何逃避斜线?
答案 0 :(得分:3)
s
命令之后的字符不一定是/
。使用路径时,我使用:
,如:
sudo sed 's:a:b:g' -i /tmp/test
答案 1 :(得分:1)
您可以更改sed的分隔符,例如使用#
:
$ sed 's#/var/lib#data/lib#'
/var/lib
data/lib
答案 2 :(得分:1)
这应该有效
sed -i "s@$a@$b@g" /tmp/test
您需要注意的两件事:
1)如果您想在sed行中使用变量,请使用双引号
2)分隔符可以不是“/
”,例如@, #, : ...
答案 3 :(得分:0)
在sed(1)中,与vi(1)一样,'/'只是惯用的分隔符。可以使用\
进行转义,在修改路径名称时会导致“倾斜牙签综合症”:
sed -e 's/\/var\/lib/data\/lib/' ...
您可以使用其他非字字符,例如';':
sed -e 's;/var/lib;data/lib; ...