@historydev
Валера, настало твоё время

Как найти и изменить строку в блоке?

Нужно изменить порт только в блоке /test/v2.0.0:

server {
    location /test/v2.0.3 {
        modsecurity on;
        proxy_pass http://10.1.0.6:3000;
    }
    location /test/v2.0.0 {
        modsecurity on;
        proxy_pass http://10.1.0.6:3000;
    }
}


sed '0,/:[0-9].*;/{s/:[0-9].*;/:5555;/}' test.nginx
- меняет первое совпадение
sed '/.*location.*\/test\/v2.0.0\/.*:[0-9].*;/{s/:[0-9].*;/:5555;/}' test.nginx
- ничего не меняет
sed 's/.*location.*\/test\/v2.0.0\/.*:[0-9].*;/:5555;/' test.nginx
- ничего не меняет

P.S:

Как звучит задача:
Найти location /test/v2.0.0 перед которым может быть любой символ кроме "#", выбрать всё из скобок {}, найти между ними строку порта :3000;, заменить её на указанную.
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
#!/bin/bash
echo 'server {
    location /test/v2.0.3 {
        modsecurity on;
        proxy_pass http://10.1.0.6:3000;
    }
    location /test/v2.0.0 {
        modsecurity on;
        proxy_pass http://10.1.0.6:3000;
    }
}' | sed -r '\!^\s+location /test/v2.0.0 \{!,/^\s+\}$/ s/:3000;/:5555;/'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы