Replace Single Line com conteúdo Multline dentro do arquivo nginx.conf

0

Eu quero fazer um backup do arquivo "/etc/nginx/nginx.conf"

E, em seguida, edite-o para a seguinte linha no arquivo:

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

Em vez disso, 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;
    }
}

Meu problema é que ainda sou muito novo no Linux e achei que poderia usar o sed, mas meu novo entendimento é que ele lê linha por linha e, portanto, não é bom para conteúdo multilinha. Não tenho certeza de como fazer o perl trabalhar com ele, já que alguns dos personagens interfeririam no perl. Meu cérebro é meio frito, apenas aprendendo como o NGINX funciona como é .... qualquer ajuda é muito apreciada.

Meu comando SED atual ....

Deve funcionar bem. Yay! : 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
    
por Wade S 28.09.2017 / 08:11

2 respostas

0

sed pode converter uma linha em várias linhas.
Dê uma olhada no exemplo "prova de conceito" abaixo. Ele gera um documento "here doc" convertido.

#!/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
    
por 28.09.2017 / 08:31
0

Além das informações fornecidas por Andrzej A. Flip, você precisa escapar dos caracteres de ponto-e-vírgula (;), asterisco (*) e barra (/). O \ n faz com que seja uma nova linha, e use -i.bak para fazer um backup do arquivo antes de fazer a mudança com uma extensão .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
    
por 28.09.2017 / 18:36