如何在 bash 脚本中匹配和替换此多行模式?

如何在 bash 脚本中匹配和替换此多行模式?

我有一个文件jail.local,它有这样的部分

[apache]

enabled = true
logpath = /var/log/apache/error.log

[ssh]

enabled = false
port = ssh

我想要

  • 匹配字符串[ssh]
  • 对下面的字符串 2 行执行替换,即更改
    • enabled = false
    • enabled = true

这样新的文本就变成了

[ssh]

enabled = true
port = ssh

我已经看过使用sed,但我无法理解解决这个问题所需的命令sed是相当“每行”导向的。
我该如何进行这种替换?

答案1

使用 GNU sed:

sed -e '/\[ssh\]/,+2{s/false/true/}' file

使用 POSIX sed:

sed -e '/\[ssh\]/n;n;s/false/true/' file

相关内容