我正在尝试在Vagrant中使用Bash脚本来自动设置ELK堆栈。其中一个nginx配置文件需要适量的缩进。
我试过了:
sudo sed -i '28 a \ \ \ \ \ \ \ \ auth_basic_user_file /etc/nginx/htpasswd.users;' /etc/nginx/sites-available/default
它应该附加一个距离边距8个空格的行,并且在我需要它的位置,但是当我检查配置文件时,不会添加空格。
我已成功使用:
sudo sed -i '73 a \ \ \ \ bika.lims' /usr/local/Plone/zeocluster/buildout.cfg
之前的另一个项目,它添加了正确的空格数。 我这次做错了吗?
提前致谢。
答案 0 :(得分:0)
您可以从第28行获取缩进,并在添加新行时使用它。
例如,在第28行的/ etc / nginx / sites-available / default中 像这样的东西:
# include snippets/snakeoil.conf;
然后你可以这样做:
sudo sed -i 's,^\([[:space:]]*\).*include snippets/snakeoil.conf.*,&\n\1auth_basic_user_file /etc/nginx/htpasswd.users,' /etc/nginx/sites-available/default
s/regexp/replacement/
中使用逗号作为分隔符s,regexp,replacement,
。在regexp中引用/
是有帮助的。 ^\([[:space:]]*\).*include snippets/snakeoil.conf.*
正则表达式与# include snippets/snakeoil.conf;
2.1 ^\([[:space:]]*\)
匹配子表达式组\(\)
。从行首开始匹配所有空格。现在它可以引用特殊的转义\1
(参见步骤3.3)。
&\n\1auth_basic_user_file /etc/nginx/htpasswd.users
这将被替换。
3.1 &
- 特殊字符&指代匹配的模式空间的那部分。所以它只是保留旧线
# include snippets/snakeoil.conf;
就位。
3.2 \n
- 新行
3.3 \1
- 特殊转义\1
以引用步骤2.1中的子表达式
3.4 auth_basic_user_file /etc/nginx/htpasswd.users
- 说明需要添加的内容