Изменить / сопоставить строку на n строк ниже определенного совпадения в Bash? - PullRequest
0 голосов
/ 28 октября 2019

У меня сложная проблема. Ниже приведен файл 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 . Не чужой протокол конф. Я должен соответствовать PROTOCOL = http 3 строки ниже [MARATHON]. Я исследовал и не мог найти никакого решения. Там только 1 строка под сед решения.

Одна идея застряла у меня была как-то специально grep [MARATHON] и 3 строки ниже и хвостовая 1 строка. Я не знаю. Как это можно исправить? Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 28 октября 2019

Решение найдено здесь

sed '/\[MARATHON\]/{N;N;N;s/http/https/;}' <file>
1 голос
/ 28 октября 2019

Если у вас есть python, вы можете использовать crudini :

crudini --set ndxconfig.ini MARATHON protocol https
0 голосов
/ 31 октября 2019

Это кричит для ed, который обрабатывает файл как единое целое, а не обрабатывает его строку за один раз, например sed (и также не зависит от наличия не-posix -i расширения дляsed для редактирования файлов на месте):

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

Это заменит строку PROTOCOL в блоке, который начинается со строки, соответствующей MARATHON, и заканчивается пустой строкой. Запись протокола может быть второй, третьей, четвертой и т. Д. Строкой;не имеет значенияЕсли протокол уже https, он ничего не будет делать (за исключением печати знака вопроса)

...