在Linux中使用正则表达式后将文本追加到文件

时间:2018-09-30 16:46:46

标签: regex linux nginx awk sed

我想在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

3 个答案:

答案 0 :(得分:2)

使用sed:

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

答案 1 :(得分:1)

我建议使用此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语句进行打印。

答案 2 :(得分:1)

这可能就是您想要的,使用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