【问题标题】:Append text to a file after a regular expression in linux在linux中的正则表达式之后将文本附加到文件
【发布时间】:2018-09-30 16:46:46
【问题描述】:

我想在 nginx 文件的配置中添加额外的文本行。我写了一个正则表达式HERE,虽然它不适用于sed。在找到的文本之后添加文本的脚本应该是什么样的?

我正在尝试使用此命令,但没有成功:

sed '/location \/ {(\n|.)*?[a-zA-Z0-9 \n;#._\/=$,]*}/r nginxphp.txt' /etc/nginx/sites-available/default

这个问题中最重要的是在 sed 语法中应该如何看待正则表达式?

或者只是在 debian 中注入一些行的另一种方式(在我的示例中) 我想在 /etc/nginx/sites-available/default 中进行更改:

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules;
    }
HERE SOME TEXT

【问题讨论】:

  • nginxphp.txt的内容是单行还是多行?如果是多行,则在您的问题中显示其内容示例,以便我们查看它是否还包含与您的正则表达式匹配的行。

标签: regex linux nginx awk sed


【解决方案1】:

使用 sed :

sed '/location \/ {/!b;:A;N;/}/!bA;r nginxphp.txt' /etc/nginx/sites-available/default

【讨论】:

  • 这看起来也不错,但在默认配置文件中我有多个位置键(第二个已注释)所以我认为这个脚本应该添加这个文件一次
【解决方案2】:

这可能是您想要的,将 GNU awk 用于多字符 RS 和 RT:

awk '
NR==FNR { new=$0; next }
{ print $0 (RT ? RT new : "") }
' \
ORS="" \
RS='^$' nginxphp.txt \
RS='(^|\n)[[:blank:]]*location */ *{[^}]*} *\n' /etc/nginx/sites-available/default

【讨论】:

    【解决方案3】:

    我建议使用这个gnu awk:

    awk -i inplace -v RS='\n[[:blank:]]*location / {[^}]*}' '1
    RT {
       print RT 
       if ((getline < "nginxphp.txt") > 0)
          print
    }' /etc/nginx/sites-available/default
    
    • RS='\n[[:blank:]]*location / {[^}]*}' 匹配完整的 location 块并使其成为记录分隔符。
    • print RT 打印匹配的文本
    • getline 函数在内存中读取 nginxphp.txt,然后使用 print 语句打印。

    【讨论】:

    • 有效!非常感谢!值得补充的是,为了保存执行的操作,添加-i inplace参数
    • 如果该 getline 失败,您的脚本将悄悄地、神秘地重新打印该“位置”行之前的整个“默认”文件。它还将在“位置”行之后和输出末尾以及“nginxphp.txt”的内容之后添加一个额外的空白行,如果该文件包含与“位置”正则表达式匹配的行,那么你会得到之前的部分。请参阅awk.freeshell.org/AllAboutGetline 了解何时以及如何使用 getline。
    • 公平点 Ed 并感谢 getline 上的有用链接。我现在已经编辑了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2021-03-15
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多