将文件 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 使其成为新行,并使用 -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

相关内容