使用 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)$' 和 '位置~/愿望清单*'。

此外,' 末尾的 IP位置^~/数据/' 必须将 '/data/' 字符串附加到末尾。最后,我必须考虑配置文件中 http 和 https 的不同实例。

我尝试使用 sed 编辑“proxy_pass”之后的值,但是我不知道如何仅更改嵌套在文本中的特定值。到目前为止我编写的代码找到了 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

相关内容