【问题标题】:Insert line using bash script使用 bash 脚本插入行
【发布时间】:2014-09-27 01:19:48
【问题描述】:

我正在编写一个在服务器上安装一些元素的 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

我好像想不通。

【问题讨论】:

  • 这不是管理系统配置的好方法。考虑类似puppet。

标签: bash shell sed


【解决方案1】:

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 扩展。

【讨论】:

    【解决方案2】:

    为了包含新行

    include /etc/nginx/sites-enabled/*;
    include /etc/nginx/sites-available/*;
    

    行后:

    include /etc/nginx/mime.types;
    

    您可以使用 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 保存原始 conf 文件并修改 nginx.conf 以包含:

    include /etc/nginx/mime.types;
    include /etc/nginx/sites-enabled/*;
    include /etc/nginx/sites-available/*;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 2020-06-29
      • 2018-02-20
      相关资源
      最近更新 更多