Замените одну строку содержимым Multline в файле nginx.conf

543
Wade S

Я хочу сделать резервную копию файла "/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 
0
Вы хотите заменить ** одну ** строку на несколько строк. Даже `sed` может это сделать. AnFi 6 лет назад 0
Хех, все, что я пробовал, просто сломало это. Все, что мне удалось сделать с помощью sed, это заменить весь файл этим вторым блоком примерно 10 раз. Я все еще смотрю, у меня просто был кто-то, кто мог бы сделать что-то подобное, что могло бы ответить на это быстрее, чем я мог бы копать в течение следующих нескольких часов. Это то, чем я занимался в течение некоторого времени, настраивая программу под названием drawpile для работы в качестве сервера на Raspberry Pi 3. Wade S 6 лет назад 0

2 ответа на вопрос

0
AnFi

sedможет конвертировать одну строку в несколько строк.
Взгляните на пример сценария «Доказательство концепции» ниже. Он выводит преобразованный документ "здесь документ".

#!/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 сервер {\ n listen 8081; \ n \ n location \ / {\ n proxy_pass http: \ / \ / 127.0.0.1:8080\/;\n proxy_redirect default; \ n auth_basic "Администрирование сервера"; \ n auth_basic_user_file \ / etc \ / nginx \ / пароли; \ n} \ n} \ n / '/ home / pi / Public / NGINX-test / nginx.conf` Wade S 6 лет назад 0
Я изменил свой пример сценария, чтобы найти нужную строку ввода. AnFi 6 лет назад 0
Спасибо, но проблема все еще в этом. У меня есть несколько строк, которые заканчиваются точкой с запятой, и она все еще не запускается из-за этого. Мне также нужен способ избежать точки с запятой. Wade S 6 лет назад 0
На самом деле, я думаю, я наконец понял это. Спасибо, что указал мне правильное направление. Wade S 6 лет назад 0
0
Wade S

В дополнение к информации, предоставленной Анджеем А. Флипом, вам необходимо ввести точку с запятой (;), звездочку (*) и косую черту (/). \ 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