Reemplace el contenido de una sola línea con contenido de varias líneas dentro del archivo nginx.conf

Reemplace el contenido de una sola línea con contenido de varias líneas dentro del archivo nginx.conf

Quiero hacer una copia de seguridad del archivo "/etc/nginx/nginx.conf"

Y luego edítelo para que aparezca la siguiente línea en el archivo:

include /etc/nginx/sites-enabled/*;

En su lugar aparecerá como...

include /etc/nginx/sites-enabled/*;

server {
    listen 8081;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect default;
        auth_basic "Server Administration";
        auth_basic_user_file /etc/nginx/passwords;
    }
}

Mi problema es que todavía soy muy nuevo en Linux y pensé que podría usar sed, pero mi nueva comprensión es que lee línea por línea y, por lo tanto, no es bueno para contenido de varias líneas. No estoy seguro de cómo hacer que Perl funcione con él, ya que algunos de los caracteres interferirían con Perl. Mi cerebro está un poco frito con solo aprender cómo funciona NGINX tal como está... cualquier ayuda es muy apreciada.

Mi comando SED actual....

Debería funcionar bien. ¡Hurra! :D

sudo sed -i.bak 's/^    include \/etc\/nginx\/sites-enabled\/\*\;$/&\n  \n  server {\n      listen 8081\;\n     \n      location \/ {\n         proxy_pass http:\/\/127.0.0.1:8080\/\;\n            proxy_redirect default\;\n          auth_basic "Server Administration"\;\n          auth_basic_user_file \/etc\/nginx\/passwords\;\n    }\n}\n/' /home/pi/Public/NGINX-test/nginx.conf

Respuesta1

sedPuede convertir una sola línea en varias líneas.
Eche un vistazo al script de muestra de "prueba de concepto" que aparece a continuación. Genera un documento convertido "aquí doc".

#!/bin/sh
sed 's/^include \/etc\/nginx\/sites-enabled\/\*;$/&\nYES!/' <<END
input-line:1
include /etc/nginx/sites-enabled/*;
input-line:3
include /etc/nginx/sites-enabled/*;
END

Respuesta2

Además de la información proporcionada por Andrzej A. Flip, es necesario omitir los caracteres de punto y coma (;), asterisco (*) y barra diagonal (/). \n lo convierte en una nueva línea y usa -i.bak para hacer una copia de seguridad del archivo antes de realizar el cambio con una extensión .bak.

sudo sed -i.bak 's/^    include \/etc\/nginx\/sites-enabled\/\*\;$/&\n  \n  server {\n      listen 8081\;\n     \n      location \/ {\n         proxy_pass http:\/\/127.0.0.1:8080\/\;\n            proxy_redirect default\;\n          auth_basic "Server Administration"\;\n          auth_basic_user_file \/etc\/nginx\/passwords\;\n    }\n}\n/' /home/pi/Public/NGINX-test/nginx.conf

información relacionada