![将文件 nginx.conf 中的单行内容替换为多行内容](https://linux22.com/image/1542209/%E5%B0%86%E6%96%87%E4%BB%B6%20nginx.conf%20%E4%B8%AD%E7%9A%84%E5%8D%95%E8%A1%8C%E5%86%85%E5%AE%B9%E6%9B%BF%E6%8D%A2%E4%B8%BA%E5%A4%9A%E8%A1%8C%E5%86%85%E5%AE%B9.png)
我想备份文件“/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