我想備份檔案“/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