regex - 在 Bash 中编辑/匹配某个特定匹配项下方的字符串 n 行?

标签 regex linux bash sed grep

我有一个复杂的问题。下面是我要编辑的 ndxconfig.ini 文件

# /etc/ndxconfig.ini will override this file
# if APP_ID is added in service propery, service discovery will be using marathon;
# HOST/PORT specified will override values retrieved from marathon

[MARATHON]
HOSTS = {{ ','.join(groups['marathon'])}}
PORT = 8080
PROTOCOL = http
SECRET = SGpQIcjK2P7RYnrdimhhhGg7i8MdmUqwvA2JlzbyujFS4mR8M88svI7RfNWt5rnKy4WHnAihEZmmIUb940bnlYmnu47HdUHE


[MYSQL]
; APP_ID = /neon/infra/mysql
HOST = {{keepalived_mysql_virtual_ip}}
PORT = 3306
SECRET = tIUFN1rjjDBdEXUsOJjPEtdieg8KhwTzierD48JsgDeYc84DD6Uy5a6kzHfKolq1MNS1DKwlSqxENk33UulJd9DPHPzYCxFm

我想将 特别是 marathon 协议(protocol) conf 从 http 更改为 https。不是其他人的协议(protocol) conf。我必须匹配 PROTOCOL = http [MARATHON] 行下方的 3 行。我进行了研究,但找不到任何解决方案。 sed 解决方案下面只有 1 行。

我的一个想法不知何故特别 grep [MARATHON] 和下面的 3 行和尾部 1 行。我不知道。 如何解决这个问题?请帮忙。

最佳答案

找到解决方案 here

sed '/\[MARATHON\]/{N;N;N;s/http/https/;}' <file>

关于regex - 在 Bash 中编辑/匹配某个特定匹配项下方的字符串 n 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58587929/

相关文章:

linux - 如何在刚刚加了时间戳的脚本中指定一个文件?

linux - Bash:嵌套的 if 语句没有完成作用域

regex - 尝试使用 Sass 编译时出现 "regexp has invalid interval"

regex - MongoDB 正则表达式分组

java - 如何使用模式匹配器仅获取与 Java 中的正则表达式匹配的第一行?

linux - 监视日志大小事件

linux - inotify 不将 vim 编辑视为修改事件

linux - 如何使用 wget 下拉域列表并使用 grep 扫描它们

linux - 无法从 Linux bash 中的文本文件中删除隐藏字符

regex - 仅当表达式的其余部分匹配时,如何接受字符 "' "?