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

関連情報