Заменить однострочное содержимое на многострочное в файле nginx.conf

Заменить однострочное содержимое на многострочное в файле nginx.conf

Я хочу сделать резервную копию файла "/etc/nginx/nginx.conf"

А затем отредактируйте его так, чтобы в файле была следующая строка:

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

Вместо этого будет отображаться как...

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;
    }
}

Проблема в том, что я все еще новичок в Linux, и я думал, что смогу использовать sed, но мое новое понимание заключается в том, что он читает строку за строкой, и поэтому не подходит для многострочного контента. Я не уверен, как заставить perl работать с ним, так как некоторые символы будут мешать perl. Мой мозг немного кипит, просто изучая, как работает NGINX... любая помощь будет очень полезна.

Мой нынешний штаб СЕПГ...

Должно работать отлично. Ура! :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

решение1

sedможет преобразовать одну строку в несколько строк.
Взгляните на пример скрипта "proof of concept" ниже. Он выводит преобразованный документ "here 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

решение2

В дополнение к информации, предоставленной Andrzej A. Flip, вам необходимо экранировать символы точки с запятой (;), звездочки (*) и косой черты (/). \n делает это новой строкой, и использовать -i.bak для создания резервной копии файла перед внесением изменений с расширением .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

Связанный контент