Editando texto aninhado e linhas específicas dentro de um arquivo usando o script bash

1

Estou tentando editar meu arquivo 'nginx.conf' usando um script básico destinado a ajudar os usuários a alterar os ambientes rapidamente. O usuário insere seu ambiente selecionado como um argumento ao executar o script, que é armazenado como uma variável no script 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/*;
}

O problema que estou encontrando é encontrar um método ideal para editar linhas específicas que estão aninhadas dentro do meu arquivo 'nginx.conf'. Apenas determinadas instâncias da linha 'proxy_pass' são necessárias para alterar, como as linhas entre ' localização ~. (Jsp) $ ' e ' localização ~ / wishlist *'.

Além disso, o IP no final de ' location ^ ~ / data /

Eu tentei editar os valores depois de 'proxy_pass' usando sed, no entanto, não sei como alterar somente valores específicos que estão aninhados no texto. Eu sou um iniciante na expressão regular, o código que eu escrevi até agora encontra proxy_pass mas muda todas as instâncias que seguem a string.

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

Todos os comentários e sugestões são bem-vindos, obrigado!

    
por Interplay 31.07.2017 / 15:55

1 resposta

0

Se sua configuração for regular o suficiente, e supondo que você já esteja dividindo-a em pequenos arquivos separados, provavelmente será mais fácil gerar o arquivo inteiro a partir do zero, caso em que poderia ser tão fácil quanto

#!/bin/sh
ENV_IP=$1
cat > nginx.conf <<EOF
...
...
location ^~/data/{
      proxy_pass https://$ENV_IP/data/
}
...
...
EOF
    
por 04.08.2017 / 11:46

Tags