我正在编写一个bash脚本,在服务器上安装一些元素,然后遇到问题。
我正在安装nginx - 默认情况下,它不包括已启用网站和网站可用。
使用我的脚本,我会创建它们,并将它们包含在nginx.conf
中我显然使用
制作目录mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
现在,我尝试了以下方法,但失败了:
sed '/include /etc/nginx/mime.types;/a include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf
并且:
sed 'include /etc/nginx/mime.types;/a include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf
和
OLDLINE = 'include /etc/nginx/mime.types;'
NEWLINE = 'include /etc/nginx/sites-enabled/*;'
sed 'OLDLINE/a NEWLINE' /etc/nginx/nginx.conf
和
OLDLINE = 'include /etc/nginx/mime.types;'
NEWLINE = 'include /etc/nginx/sites-enabled/*;'
sed '/OLDLINE/a NEWLINE' /etc/nginx/nginx.conf
并且:
OLDLINE = "include /etc/nginx/mime.types;"
NEWLINE = "include /etc/nginx/sites-enabled/*;"
sed 'OLDLINE/a NEWLINE' /etc/nginx/nginx.conf
我似乎无法弄明白。
答案 0 :(得分:0)
sed
命令的问题在于模式包含与命令分隔符冲突的/
个字符。
如果你仍想用sed
来解决这个问题,那么简单的解决办法就是逃避模式中的每一个斜杠:
sed '/include \/etc\/nginx\/mime.types;/a include \/etc\/nginx\/sites-enabled\/*;' /etc/nginx/nginx.conf
但是如果你对牙齿锯齿效果过敏,请尝试强制使用不同的命令分隔符:
sed '\@include /etc/nginx/mime.types;@a include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf
此处我们使用@
作为分隔符,因此/
个字符不再需要转义。
请注意,您可以sed
使用-i
进行就地替换,但我相信这是GNU扩展。
答案 1 :(得分:0)
为了包含新行
include /etc/nginx/sites-enabled/*;
include /etc/nginx/sites-available/*;
行后:
include /etc/nginx/mime.types;
您可以使用{strong>编辑nginx.conf inline 的sed
表达式(并创建原始备份),方法是搜索现有行include /etc/nginx/mime.types;
,然后替换换行符以及您想要的添加内容:
sed -i.bak '/include \/etc\/nginx\/mime.types;/s|$|\ninclude /etc/nginx/sites-enabled/*;\ninclude /etc/nginx/sites-available/*;|' nginx.conf
这会创建nginx.conf.bak
来保存原始配置文件并修改nginx.conf
以包含:
include /etc/nginx/mime.types;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/sites-available/*;