我正在尝试编写一个bash脚本来配置服务器的各个方面.这里的上下文是用另一个值替换conf文件(ini格式)中的变量值.
背景是
[ssh-iptables]
enabled = false
Run Code Online (Sandbox Code Playgroud)
而我只需要将false更改为true.
通常我只是简单地做一下 sed
sed -i 's/^enabled = false/enabled = true/g' /etc/fail2ban/jail.conf
Run Code Online (Sandbox Code Playgroud)
但enabled = false存在于多个地方.
我尝试过使用但awk没有成功
awk -F ":| " -v v1="true" -v opt="enabled" '$1 == "[ssh-iptables]" && !f {f=1}f && $1 == opt{sub("=.*","= "v1);f=0}1' /etc/fail2ban/jail.conf
Run Code Online (Sandbox Code Playgroud)
上面的内容源自这个论坛帖子,但我对如何在脚本中使用它以使其工作没有足够的理解.它似乎只是相当于cat /etc/fail2ban/jail.conf
我发现了一些相当长的脚本并不理想,因为这会发生在大量的ini文件中,所以我希望有人可以帮我纠正上面的代码或者指出我正确的方向.
如果这属于ServerFault,请道歉,但因为它的脚本而不是服务器配置本身的错综复杂,我在这里可能会更贴切.
Dan*_*ego 14
假设你的格式是部分中没有方括号行(如[ssh-iptables]),我会使用上面的解决方案(with sed)但是将查询限制在该块中,如下所示:
sed -i '/^\[ssh-iptables\]$/,/^\[/ s/^enabled = false/enabled = true/' /etc/fail2ban/jail.conf
Run Code Online (Sandbox Code Playgroud)
开头的额外部分告诉以下替换语句仅在以a开头的行[ssh-iptables]和以a开头的下一行之间运行[.它使用两个用逗号分隔的正则表达式来表示边界.
如果您愿意使用外部应用程序,您可能会对使用它感兴趣crudini.
例:
[oauth2provider]
module = SippoServiceOAuth2Provider
backend[] = none
wiface = public
; [calldirection]
; module = SippoServiceCallDirection
; backend[] = none
; wiface = internal
Run Code Online (Sandbox Code Playgroud)
标准grep不会过滤注释的异常.
随着crudini咨询,设置和修改的事情更容易:
$ crudini --get /myproject/config/main.ini oauth2provider wiface
public
$ crudini --get /myproject/config/main.ini calldirection wiface
Section not found: calldirection
Run Code Online (Sandbox Code Playgroud)
我在一个仅限bash的应用程序,并采取了这种方法.只是一个建议.
问候,
| 归档时间: |
|
| 查看次数: |
8720 次 |
| 最近记录: |