Редактирование вложенного текста и определенных строк в файле с использованием сценария 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/" 

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

  • Как читать строки из файла и комбинировать перед сопоставлением шаблона из другого файла?
  • Как вставить текст перед первой строкой файла?
  • Удаление всех пробелов, вкладок, строк новой строки и т. Д. Из переменной?
  • Заменить \ n на новую строку в sed portably
  • sed разделить верилогическую шину на отдельный порт
  • Напишите файл, имя которого соответствует строке в сценарии sed
  • вставить строку для отсутствующего значения
  • Удаление ведущих нулей из DATE
  • 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 
    Linux и Unix - лучшая ОС в мире.