Bash 스크립트를 사용하여 파일의 중첩된 텍스트와 특정 줄 편집

Bash 스크립트를 사용하여 파일의 중첩된 텍스트와 특정 줄 편집

사용자가 환경을 빠르게 변경할 수 있도록 설계된 bash 스크립트를 사용하여 "nginx.conf" 파일을 편집하려고 합니다. 사용자는 스크립트 실행 시 자신이 선택한 환경을 파라미터로 입력하고, 해당 환경은 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" 파일에 중첩된 특정 줄을 편집하는 가장 좋은 방법을 찾는 것입니다. "proxy_pass" 줄의 특정 인스턴스만 변경해야 합니다.위치~.(jsp)$' 그리고'위치~/위시리스트*'.

또한 '위치^~/데이터/' '/data/' 문자열은 끝에 추가되어야 합니다. 마지막으로 구성 파일에서 http와 https의 다양한 인스턴스를 고려해야 했습니다.

"proxy_pass" 이후의 값을 편집하기 위해 sed를 사용해 보았지만 텍스트에 중첩된 특정 값만 변경하는 방법을 모르겠습니다. 지금까지 작성한 코드는 Proxy_pass를 찾았지만 해당 문자열을 따르는 모든 인스턴스를 변경합니다.

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

답변1

구성이 충분히 규칙적이고 이를 작은 개별 파일로 분할했다고 가정하면 매번 처음부터 전체 파일을 다시 생성하는 것이 더 쉬울 수 있습니다. 이 경우 다음과 같을 수 있습니다.

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

관련 정보