试图在ubuntu上逃避/为sed

时间:2013-02-04 13:24:53

标签: sed

我正在尝试使用sed替换文件中的路径。

sudo sed 's/a/b/g' -i /tmp/test

但变量是

a = /var/lib and 
b = /data/lib

如何逃避斜线?

4 个答案:

答案 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; ...