linux - 如何使用 sed 更改 puppet 文件的 [block] 之间的内容?

标签 linux bash sed

这个jail.conf 文件。我想用 sed 将 puppet 文件的 [maxretry = 6] 更改为 maxretry = 5。

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

[dropbear]

enabled  = false
port     = ssh
filter   = sshd
logpath  = /var/log/dropbear
maxretry = 6

我该怎么办?

我的傀儡命令。 exec { "fail2banadd":
命令 => '/bin/sed -i "/[ssh]/,/[dropbear]/s/maxretry = 6/maxretry = 5/"/etc/fail2ban/jail.conf', }

我收到此错误。

=> 默认值:err:/Stage[main]//Exec[fail2banadd]/returns: 从 notrun 更改为 0 失败:/bin/sed -i "/[ssh]/,/[dropbear]/s/maxretry = 6/maxretry = 5/"/etc/fail2ban/jail.conf 返回 2 inste [0] 之一的 d 位于/tmp/vagrant-puppet-3/manifests/init.pp:76

最佳答案

版本 1

sed 解决方案仅更改 [ssh][dropbear] 之间的 maxretry 值:

$ sed  -i"" '/\[ssh\]/,/\[dropbear\]/ s/maxretry = 6/maxretry = 5/' jail.conf

输出如下:

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5

[dropbear]

enabled  = false
port     = ssh
filter   = sshd
logpath  = /var/log/dropbear
maxretry = 6

版本 2

此变体删除了 [ssh][dropbear] 之间的 maxretry 条目,并将所有其他 maxretry = 6 条目更改为 maxretry = 5:

sed  -i"" 's/maxretry = 6/maxretry = 5/; /\[ssh\]/,/\[dropbear\]/ {/maxretry/d}' jail.conf

关于linux - 如何使用 sed 更改 puppet 文件的 [block] 之间的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24988242/

相关文章:

linux - 比较多个性能报告

c - 查找在c中发送信号的进程

linux - 根据文件夹名称移动文件夹

bash - 从 tar 存档中删除重复项

bash - Slurm:提交到多个节点时出错 ("slurmstepd: error: execve(): python: No such file or directory")

php - 在 Sh/Bash 和 php 中解析配置参数的最佳/最简单方法

linux - 删除字符串中的所有单字符单词 EXCEPT 'a' 'i' 和 'o'

linux - lstat() 阻塞 15 分钟

linux - 如何将2个文件中的字符串合并为1个并用空格分隔?

regex - sed 无法识别括号后的制表符