簡體   English   中英

在 Bash 中的某個特定匹配項下方編輯/匹配字符串 n 行?

[英]Edit/Match a string n lines below some specific match in Bash?

我有一個復雜的問題。 下面是我要編輯的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

我想將馬拉松協議配置從 http 更改為 https 不是其他的協議配置。 我必須在[MARATHON]下方匹配PROTOCOL = http 3 行。 我研究並找不到任何解決方案。 sed 解決方案下面只有 1 行。

我的一個想法特別是 grep [MARATHON]和下面的 3 行和尾 1 行。 我不知道。 如何解決這個問題? 請幫忙。

這里找到的解決方案

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

如果你有python可用,你可以使用crudini

crudini --set ndxconfig.ini MARATHON protocol https

這對ed尖叫,它將文件視為一個整體,而不是像sed那樣一次處理一行(並且也不依賴於sed的非posix -i擴展的可用性,用於文件的就地編輯):

ed -s ndxconfig.ini <<'EOF'
/MARATHON/;/^$/ s/^PROTOCOL = http$/PROTOCOL = https/
w
EOF

這將替換塊中以匹配 MARATHON 的行開頭並以空行結尾的 PROTOCOL 行。 協議條目可以是第二行、第三行、第四行等; 沒關系。 如果協議已經是https,它不會做任何事情(除了打印一個問號)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM