Ersetzen Sie Single Line durch Multline-Inhalt in der Datei nginx.conf

641
Wade S

Ich möchte eine Sicherungskopie der Datei "/etc/nginx/nginx.conf" erstellen.

Und dann editiere es so die folgende Zeile in der Datei:

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

Erscheint stattdessen als ...

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

Mein Problem ist, dass ich in Linux noch sehr neu bin und ich dachte, ich könnte sed verwenden, aber mein neues Verständnis davon ist, dass es Zeile für Zeile liest und daher nicht für mehrzeilige Inhalte geeignet ist. Ich bin nicht sicher, wie man Perl damit arbeiten lässt, da einige der Charaktere Perl stören würden. Mein Gehirn ist irgendwie gebraten, nur zu lernen, wie NGINX so funktioniert, wie es ist ... Jede Hilfe wird sehr geschätzt.

Mein aktueller SED-Befehl ....

Sollte gut funktionieren. 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 
0
Sie möchten ** einzelne ** Zeile durch mehrere Zeilen ersetzen. Sogar "sed" kann es schaffen. AnFi vor 6 Jahren 0
Heh, alles, was ich versucht habe, ist kaputt gegangen. Alles, was ich mit sed geschafft habe, war etwa zehnmal, die gesamte Datei durch diesen zweiten Block zu ersetzen. Ich bin immer noch auf der Suche. Ich hatte vielleicht schon Erfahrung mit etwas Ähnlichem, das schneller antworten könnte, als ich es für die nächsten paar Stunden finden konnte. So habe ich schon seit einiger Zeit ein Programm namens drawpile als Server auf dem Raspberry Pi 3 eingerichtet. Wade S vor 6 Jahren 0

2 Antworten auf die Frage

0
AnFi

sedkann einzelne Zeile in mehrere Zeilen umwandeln.
Schauen Sie sich das Beispielskript "Proof of Concept" unten an. Es gibt konvertiertes Dokument "hier doc" aus.

#!/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 
Ich habe es geschafft, den Fehler zu beseitigen, nachdem ich ihn ein bisschen genauer erforscht hatte und kein Fehlercode vorhanden ist. Aber es tut nichts. `sudo sed -i.bak -es / ^ \ / etc \ / nginx \ / sites-enabled \ / *; $ / \ / etc \ / nginx \ / sites-enabled \ / *; \ n \ n Server {\ n listen 8081; \ n \ n Speicherort \ / {\ n Proxy_Pass http: \ / \ / 127.0.0.1:8080\/ ;\n Proxy_redirect-Standard; \ 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 vor 6 Jahren 0
Ich habe mein Beispielskript geändert, um nach der gewünschten Eingabezeile zu suchen. AnFi vor 6 Jahren 0
Danke, aber es gibt immer noch ein Problem damit. Ich habe mehrere Zeilen, die mit dem Semikolon enden und es scheint immer noch nicht zu laufen. Ich brauche auch einen Weg, um dem Semikolon zu entkommen. Wade S vor 6 Jahren 0
Ich glaube, ich habe es endlich herausgefunden. Danke, dass Sie mich in die richtige Richtung weisen. Wade S vor 6 Jahren 0
0
Wade S

Zusätzlich zu den Informationen von Andrzej A. Flip müssen Sie das Semikolon (;), das Sternchen (*) und den Schrägstrich (/) voranstellen. \ N macht es zu einer neuen Zeile, und verwenden Sie -i.bak, um eine Sicherungskopie der Datei zu erstellen, bevor Sie die Änderung mit der Erweiterung .bak vornehmen.

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