Sed 似乎可以工作,但文件没有改变

Sed appears to work but file doesn't change

基于:sed: Replace part of a line

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

所以使用之前 post 中一位男士所说的,我会使用:

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

如您所见,文件没有更改。我做错了什么?

感谢阅读

你的命令将sysctl.conf作为输入,标准输出作为输出。您必须使用 -i 选项来替换 "in place"

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)

或者,您可以将标准输出重定向到新文件:

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