-1

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

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

然而变量是

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

我如何逃脱斜线?

4

4 回答 4

4

命令后面的字符s不需要是/. 使用路径时,我使用:,如下所示:

sudo sed 's:a:b:g' -i /tmp/test
于 2013-02-04T13:27:05.590 回答
1

您可以更改 sed 的分隔符,例如使用#

$ sed 's#/var/lib#data/lib#'
/var/lib   
data/lib
于 2013-02-04T13:27:41.543 回答
1

这应该工作

sed  -i "s@$a@$b@g" /tmp/test

您需要注意两件事:

1)如果要在 sed 行中使用变量,请使用双引号

2) 分隔符可以不是“ /”,例如@, #, : ...

于 2013-02-04T13:28:52.717 回答
0

在 sed(1) 中,与在 vi(1) 中一样,“/”只是常用的分隔符。它可以用 转义\,在修改路径名称时导致“倾斜牙签综合症”:

sed -e 's/\/var\/lib/data\/lib/' ...

您可以使用另一个非单词字符,例如';':

sed -e 's;/var/lib;data/lib; ...

于 2013-02-04T13:30:58.483 回答