在 bash 中使用 sed 修改配置文件

用户2650277

我正在尝试设置net.ipv4.ip_forward为 1 in /etc/sysctl.conf.以下工作正常,但它肯定会遗漏一些边缘情况

#Enable IP packet forwarding so that our VPN traffic can pass through.
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf 
sed -i 's/#net.ipv4.ip_forward = 1/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf 
grep -qF "net.ipv4.ip_forward" /etc/sysctl.conf  || echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 

例如,如果 sysctl.conf 包含以下任何一项,它将不匹配

#net.ipv4.ip_forward=1

##net.ipv4.ip_forward=1.

有没有更可靠的方法来修改配置文件中的设置?

伊尼安

您可以使用该-r开关启用扩展正则表达式(ERE),GNU sed并可选择匹配空白和#正则表达式?可选项目锚点的出现

sed -ir 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

这将匹配以下任何输入行并使用替换部件对其进行修改 net.ipv4.ip_forward = 1

net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0
#net.ipv4.ip_forward=0
##net.ipv4.ip_forward = 0
#net.ipv4.ip_forward=1
##net.ipv4.ip_forward=1
#net.ipv4.ip_forward = 1
##net.ipv4.ip_forward = 1

请参阅RegEx 演示以获得更清晰的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章