Bash Sed似乎可以工作,但文件不工作';不变

Bash Sed似乎可以工作,但文件不工作';不变,bash,sed,Bash,Sed,基于: 我想修改我的sysctl.conf文件。包含PermitTunnel something的行必须更改为PermitTunnel point-to-point 因此,正如一位男士之前在帖子中所说,我会使用: sed -e 's/PermitTunnel.*$/PermitTunnel point-to-point/g' 包括在我的文件行的末尾 由于未使用-n,我想我应该在标准输出时收到我的操作结果。然后我执行了它并获得(注意,我使用的是-2-而不是-to-,只是为了查看是否可以根据需要修

基于:

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

因此,正如一位男士之前在帖子中所说,我会使用:

sed -e 's/PermitTunnel.*$/PermitTunnel point-to-point/g'
包括在我的文件行的末尾

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

但我会:

root@debian:/home/dit# cat /etc/sysctl.conf | grep PermitTunnel
PermitTunnel point-to-point
如您所见,该文件没有更改。我做错了什么


感谢阅读

您的命令将sysctl.conf作为输入,stdout作为输出。您必须使用
-i
选项替换“就地”

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

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

完全一样。不投票关闭,因为它将自动关闭。有关信息,在某些版本的sed(特别是BSD)中,
-i
标志的参数是强制性的,而不是可选的。
-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