Для изменения конкретного порта в определенном блоке конфигурации NGINX с помощью `sed`, вам сначала необходимо точно определить уникальный паттерн, который поможет `sed` знать, где начинать и заканчивать внесение изменений. Предположим, что конфигурационный файл выглядит следующим образом:
```
server {
# Some config
}
server {
location /test/v2.0.0 {
# Some config
listen 8080;
# More config
}
}
server {
# Some other config
}
```
И вы хотите изменить порт с 8080 на 9090 только в блоке `/test/v2.0.0`. Вы можете использовать следующую команду `sed`:
```sh
sed -i '/location \/test\/v2\.0\.0/,/}/ s/listen 8080;/listen 9090;/' test.nginx
```
Детальное описание команды:
- `-i` - редактировать файлы на месте. Если вы хотите сохранить оригинальный файл без изменений, используйте `-i.bak`, это создаст резервную копию с расширением `.bak`.
- `/location \/test\/v2\.0\.0/,/}/` - диапазон шаблонов для `sed`, где он начинает действовать когда видит `location /test/v2.0.0` и заканчивает, когда видит символ `}`. Помните, что это работает только если у вас нет вложенных фигурных скобок в блоке `location`.
- `s/listen 8080;/listen 9090;/` - команда подстановки, которая заменяет `listen 8080;` на `listen 9090;`.
Обратите внимание, что этот подход предполагает, что нет вложенных скобок внутри блока `location`. Если у вас есть вложенные скобки, необходимо использовать более сложные скрипты или утилиты, такие как `awk`, или язык программирования, который позволяет выполнять парсинг и модификацию структурированных текстовых файлов.
Также помните, что редактирование конфигурационных файлов следует выполнять с большой осторожностью, чтобы избежать синтаксических ошибок, которые могут привести к сбоям службы. После изменения проверьте синтаксис NGINX с помощью `nginx -t` перед перезагрузкой службы.