Добавить текст в файл после регулярного выражения в Linux - PullRequest
0 голосов
/ 30 сентября 2018

Я хотел бы добавить дополнительные строки текста в конфигурацию файла nginx.Я написал регулярное выражение ЗДЕСЬ , хотя оно не работает с sed.Как должен выглядеть скрипт, который будет добавлять текст после найденного текста?

Я пытаюсь использовать эту команду, но безуспешно:

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

Наиболее важным в этом вопросе является Как должно выглядеть регулярное выражение в синтаксисе sed?

или просто еще один способ вставить некоторые строки в файл в debian (в моем примере) Я хотел бы внести изменения в / etc / nginx / sites-available/ по умолчанию:

    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 голосов
/ 30 сентября 2018

С седом:

sed '/location \/ {/!b;:A;N;/}/!bA;r nginxphp.txt' /etc/nginx/sites-available/default
0 голосов
/ 01 октября 2018

Это может быть то, что вы хотите, используя 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
0 голосов
/ 30 сентября 2018

Я бы предложил использовать этот 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...