태그 보관물: shell-script

shell-script

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

내 문제는 내가 리눅스에 여전히 아주 익숙하지 않은데, 나는 sed를 사용할 수있을 것이라고 생각했지만, 나의 새로운 이해는 그것이 한 줄씩 읽으므로 여러 줄의 내용에 좋지 않다는 것이다. 나는 캐릭터의 일부가 perl을 방해 할 것이기 때문에 perl 작업을하는 법을 잘 모르고있다. 내 뇌는 NGINX가 어떻게 작동하는지 배우는 것만으로도 튀김이됩니다 …. 어떤 도움도 크게 받으실 수 있습니다.

내 현재 SED 명령 ….

잘 작동해야합니다. 예! :디

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 한 줄을 여러 줄로 변환 할 수 있습니다.
아래의 샘플 “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


답변

Andrzej A. Flip이 제공 한 정보 외에도 세미콜론 (;), 별표 (*) 및 슬래시 (/) 문자를 이스케이프 처리해야합니다. \ n을 사용하면 .bak 확장자를 사용하여 파일을 백업하기 전에 새로운 줄을 만들고 -i.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


답변