Замініть єдиний рядок вмістом Multline у ​​файлі nginx.conf


0

Я хочу зробити резервну копію файлу "/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, як є .... будь-яка допомога дуже цінується.

Моя поточна команда SED ....

Має працювати просто чудово. Так! : 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

Ви хочете замінити один рядок багаторядковим. Навіть sedможе це зробити.
AnFi

Хе, все, що я спробував, просто зламав. Все, що мені вдалося зробити з sed, було замінити весь файл тим другим блоком приблизно 10 разів. Я все ще дивлюся, я просто хтось, можливо, мав досвід робити щось подібне, що могло б відповісти на нього швидше, ніж я міг зрозуміти, як копати наступні пару годин. Це те, що я робив уже деякий час, налаштовуючи програму під назвою drawpile, щоб діяти як сервер на Raspberry Pi 3.
Wade S

Відповіді:


0

sedможе конвертувати один рядок у кілька ліній.
Погляньте на зразок сценарію «доказ концепції» нижче. Він виводить перетворений документ "тут 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

Мені вдалося позбутися помилки, вивчивши її трохи більше, і код помилки не присутній. Але це нічого не робить. sudo sed -i.bak -e 's/^\/etc\/nginx\/sites-enabled\/*;$/\/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
Wade S

Я змінив зразок сценарію, щоб шукати потрібний рядок введення.
AnFi

Дякую, але проблема з цим все ще є. У мене є кілька рядків, які закінчуються крапкою з комою, і вона все ще, здається, не працює через неї. Мені також потрібен спосіб уникнути крапки з комою.
Wade S

Насправді я думаю, що я зрозумів це остаточно. Дякую, що вказали на мене в правильному напрямку.
Wade S

0

Окрім інформації, яку надає Анджей А. Фліп, вам потрібно уникнути символів з комою (;), зірочкою (*) та косою косою рисою вперед (/). \ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.