Редактирование вложенного текста и определенных строк в файле с использованием сценария bash

Я пытаюсь отредактировать свой файл «nginx.conf» с помощью сценария bash, который поможет пользователям быстро изменить среду. Пользователь вводит выбранную среду в качестве аргумента при запуске скрипта, который хранится как переменная в сценарии bash.

worker_processes 1; error_log /usr/local/var/log/nginx/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; merge_slashes off; location ~\.(jsp)$ { proxy_pass http://(environment_IP) } location ^~/r/ { proxy_pass http://127.0.0.1:7300; } location ~*/wishlist{ proxy_pass http://(environment_IP) } location ~*/media/{ proxy_pass http://(environment_IP) } location ^~/data/{ proxy_pass http://(environment_IP)/data/ } location ~*/static/{ proxy_pass http://127.0.0.1:7777; } location /{ proxy_pass http://127.0.0.1:7300/; } } # HTTPS server # server { listen 443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/myssl.crt; ssl_certificate_key /etc/ssl/private/myssl.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location ~\.(jsp)$ { proxy_pass https://(environment_IP) } location ^~/r/ { proxy_pass http://127.0.0.1:7300; } location ~*/wishlist{ proxy_pass https://(environment_IP) } location ~*/media/{ proxy_pass https://(environment_IP) } location ^~/data/{ proxy_pass https://(environment_IP)/data/ } location ~*/static/{ proxy_pass http://127.0.0.1:7777; } location /{ proxy_pass http://127.0.0.1:7300/; } } include servers/*; } 

Проблема, с которой я сталкиваюсь, – найти оптимальный метод для редактирования определенных строк, которые вложены в мой файл «nginx.conf». Для изменения, например, строк между ' location ~. (Jsp) $ ' и ' location ~ / wishlist *', требуется только определенные экземпляры строки proxy_pass.

Кроме того, IP в конце « location ^ ~ / data / » должен содержать строку «/ data /», добавленную к концу. Наконец, я должен учитывать различные экземпляры http и https, которые находятся в файле конфигурации.

Я попытался изменить значения после «proxy_pass» с помощью sed, однако я не знаю, как изменять только определенные значения, вложенные в текст. Я начинаю регулярное выражение, код, который я написал до сих пор, находит proxy_pass, но меняет все экземпляры, следующие за строкой.

 sed "s/.*proxy_pass.*/proxy_pass testpost/" 

Все комментарии и предложения приветствуются, спасибо!

One Solution collect form web for “Редактирование вложенного текста и определенных строк в файле с использованием сценария bash”

Если ваш конфиг достаточно регулярный, и, предположив, что вы уже раскалываете его на небольшие отдельные файлы, возможно, будет легче регенерировать весь файл с нуля каждый раз, и в этом случае это может быть так же просто, как

 #!/bin/sh ENV_IP=$1 cat > nginx.conf <<EOF ... ... location ^~/data/{ proxy_pass https://$ENV_IP/data/ } ... ... EOF 
  • вставить строку для отсутствующего значения
  • Удалить строку, содержащую первое появление «pattern1» после последнего появления «pattern2»?
  • История версий GNU Sed (журнал изменений) - как вы можете определить, какая функция была введена в какой версии?
  • Скрипт сопоставляет буквенный шаблон по нескольким строкам?
  • удалить строки в файле csv старше 7 дней
  • Как я могу извлечь / изменить строки в текстовом файле, данные которого разделены на поля?
  • Каким образом можно фильтровать текстовый файл для удаления пустых строк?
  • Как удалить строки под подзаголовком в файле с помощью команд linux
  • OpenWRT отсутствует OD (восьмеричная свалка)
  • Как я могу заменить многострочную строку с помощью sed?
  • Обратное обращение с sed
  • Анализ файлов журнала с помощью sed -e. Нужно учитывать уникальные имена классов
  • Linux и Unix - лучшая ОС в мире.