2017-03-31 147 views
0

我试图在Vagrant中使用Bash脚本来自动设置ELK堆栈。其中一个nginx配置文件需要适当的缩进量。在sed中添加一行即使使用转义字符也不起作用

我想:

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行获取缩进并在添加新行时使用它。

例如,在/ etc/nginx的/网站可用/默认在第28行,你有 是这样的:

# 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 
  1. 替代命令s/regexp/replacement/使用逗号作为分隔符s,regexp,replacement,。这有助于在正则表达式中不引用/
  2. ^\([[:space:]]*\).*include snippets/snakeoil.conf.*的regexp与# include snippets/snakeoil.conf;

    2.1 ^\([[:space:]]*\)匹配线路匹配子表达式组\(\)。匹配行首的所有空格。现在可以参考特殊转义\1(参见步骤3.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 - 文本什么需要添加

相关问题