基于: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
正如您所看到的,文件没有改变。我做错了什么?
感谢您阅读
答案 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