Sed似乎有效,但文件没有变化

时间:2015-01-05 13:59:00

标签: bash sed

基于:sed: Replace part of a line

我想修改我的sysctl.conf文件。包含PermitTunnel something的行必须更改为PermitTunnel point-to-point

因此,在之前的帖子中,如同一个人所说,我会使用:

sed -e 's/PermitTunnel.*$/PermitTunnel point-to-point/g'

包括我的文件行的末尾。

由于未使用-n,我猜我希望在标准输出中接收我的操作结果。然后我执行它并得到(注意我使用-2-而不是-to-只是为了看看我是否可以根据需要修改文件,因为该文件已经有了所需的行这种情况):

root@debian:/home/dit# sed -e 's/PermitTunnel.*$/PermitTunnel point-2-point/g'/etc/sysctl.conf 
PermitTunnel point-2-point

但接下来我做了:

root@debian:/home/dit# cat /etc/sysctl.conf | grep PermitTunnel
PermitTunnel point-to-point

正如您所看到的,文件没有改变。我做错了什么?

感谢您阅读

1 个答案:

答案 0 :(得分:5)

您命令将sysctl.conf作为输入,将stdout作为输出。您必须使用-i选项替换"到位"

sed -i -e 's/PermitTunnel.*$/PermitTunnel point-2-point/g'/etc/sysctl.conf 

您还可以为备份文件指定后缀:

sed -i.bak -e 's/PermitTunnel.*$/PermitTunnel point-2-point/g'/etc/sysctl.conf 

来自man sed:

-i[SUFFIX], --in-place[=SUFFIX]
     edit files in place (makes backup if extension supplied)

或者,您可以将stdout重定向到新文件:

sed -e 's/PermitTunnel.*$/PermitTunnel point-2-point/g'/etc/sysctl.conf > /etc/sysctl.conf.new