gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:11:07 24 4
gpt4 key购买 nike

嗨,最近我发布了一个问题。
edit nth line below a line match in bash?
(问题:我必须编辑 PROTOCOL 下面的第 3 行 [MARATHON] )

这是文件:

# /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

问题是如果我在某些情况下重新运行脚本, sed '/\[MARATHON\]/{N;N;N;s/http/https/;}' <file>会追加越来越多的 shttp ( httpsssss )。
所以我会在正则表达式中为 s 添加一个正向预测.
我可以用 perl -pe 但不知道怎么办 在匹配项下方的第 n 行执行此操作 .
请帮忙。我该怎么做?

最佳答案

如果您使用的是 GNU sed,则解决方案可以使用字边界:

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

您还可以利用上下文详细信息。如 http是在 PROTOCOL 之后您可以简单地使用它来重置值:
sed '/\[MARATHON\]/{N;N;N;s/\(.*= *\).*/\1https/;}' file 
\(.*= *\).*将与 = 匹配并捕获 key 和可选的空格,它的值用 \1 恢复。而 https将始终重写该值。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com