將 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 的工作原理時,我的大腦就有點燒焦了……非常感謝任何幫助。

我目前的 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

答案1

sed可以將單行轉換為多行。
請看下面的範例“概念驗證”腳本。它輸出轉換後的“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 使其成為新行,並在使用 .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

相關內容