gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:35:40 25 4
gpt4 key购买 nike

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

#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 开关在 GNU sed 中启用扩展正则表达式 (ERE) 并可选择匹配空格和#regex ? optional item anchor 一起出现,

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 Demo为了更清楚。

关于linux - 在 bash 中使用 sed 修改配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44018705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com