![如何在 bash 脚本中匹配和替换此多行模式?](https://linux22.com/image/64371/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%8C%B9%E9%85%8D%E5%92%8C%E6%9B%BF%E6%8D%A2%E6%AD%A4%E5%A4%9A%E8%A1%8C%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
我有一个文件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