2013-07-25 4 views
1

я следующее:Найти и вставить строку внутри текстового файла внутри specfic блока

server { 
      listen IP; 
      location /nginx-status { 
      stub_status on; 
      access_log off; 
      allow $IP; 
      deny all; 
     } 

Моя проблема, мне нужно вставить это специально внутри блока HTTP в моем файле nginx.conf.

Это то, что Nginx конфигурации обычно выглядит следующим образом:

http://wiki.nginx.org/FullExample

Я не знаю, если это возможно или нет. Я предполагаю, что было бы проще, если бы я вставил сразу после блока http?

В идеале, я хотел бы сделать это в BASH, но я открыт для других вариантов.

ответ

1

В одну сторону используя . Предположим, nginx.conf с данными, который вы указали в ссылке и infile с контентом, который вы хотите добавить:

vim -u NONE -N -c ' 
    set backup | 
    bn | 
    execute "normal ggyG" | 
    bn | 
    execute "normal! gg/^\\vhttp\>\<CR>f{%P" | 
    xa 
' nginx.conf infile 

Как это работает?

set backup создает резервную копию nginx.conf, добавив ~. Оригинал будет изменен на месте.

bn Изменения между обоими файлами. Первая команда execute копирует весь контент infile, а второй bn возвращает файл nginx.

Вторая execute команда ищет строку, которая начинается с http, установите курсор в открывающей фигурной скобки (f{) и использовать %, чтобы установить курсор магическим образом в одном закрытия. Затем с P вставьте содержимое, сохраненное в предыдущей команде execute.

И xa сохраняет измененный файл и завершает работу.

Смежные вопросы