The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Вопрос по парсингу конфига"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Вопрос по парсингу конфига"  +/
Сообщение от TheFatal (ok) on 30-Сен-13, 15:01 
Добрый день, есть вот такое задание:

есть конфиг nginx вида

server_name test.ru

location /
proxy_pass http://87.123.523463.1231

location /some
proxy_pass http://87.3231.561262.6262626

server_name test2.ru

location /
proxy_pass http://87.123.523463.1231

location /some
proxy_pass http://123.457457.47474.2414


нужно распарсить конфиг nginx так, чтобы выводились все server_name, в которых встречается proxy_pass http://87.123.523463.1231

собственно вопрос: какими средствами можно искать секцию server_name вверху от нужного proxy_pass ?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Вопрос по парсингу конфига"  +/
Сообщение от михалыч (ok) on 30-Сен-13, 16:56 
grep -F -B `sed -n '$=' nginx.conf` 'http://87.123.523463.1231' nginx.conf | grep 'server_name'

не, так не катит.
Конкретно в вашем примере, достаточно было бы -B 3 , но конфиг nginx может быть другим ((

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Вопрос по парсингу конфига"  +/
Сообщение от TheFatal (ok) on 30-Сен-13, 17:19 
> grep -F -B `sed -n '$=' nginx.conf` 'http://87.123.523463.1231' nginx.conf | grep
> 'server_name'

Большое спасибо за ответ, а не подскажете еще, как в вывод еще и location, в котором встретился искомый proxy_pass, добавить ? чтобы получилось что-то типа:

test1.ru
location /some

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Вопрос по парсингу конфига"  +/
Сообщение от михалыч (ok) on 30-Сен-13, 17:23 
>> grep -F -B `sed -n '$=' nginx.conf` 'http://87.123.523463.1231' nginx.conf | grep
>> 'server_name'
> Большое спасибо за ответ, а не подскажете еще, как в вывод еще
> и location, в котором встретился искомый proxy_pass, добавить ? чтобы получилось
> что-то типа:
> test1.ru
> location /some

Пока редактировал свой первый пост, вы уже успели.
Наверху неправильно. Так он абсолютно ВСЕ server_name найдет.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Вопрос по парсингу конфига"  +/
Сообщение от михалыч (ok) on 02-Окт-13, 15:07 
>> grep -F -B `sed -n '$=' nginx.conf` 'http://87.123.523463.1231' nginx.conf | grep
>> 'server_name'
> Большое спасибо за ответ, а не подскажете еще, как в вывод еще
> и location, в котором встретился искомый proxy_pass, добавить ? чтобы получилось
> что-то типа:
> test1.ru
> location /some

Как через grep sed awk я не знаю, скорее всего можно, шахматы вон на sed реализовали.
Но чиста из спортивного интереса и любви к искусству, пришлось расчехлить perl ))

#!/usr/bin/perl


use strict;
use warnings;


my $conf = "nginx.conf";
my @arr;


open ( FILECONF, $conf ) or die $!;
my @lines = reverse <FILECONF>;
close FILECONF;


for ( @lines )
{
    chomp;
    s/#.*//;
    s/^\s+//;
    s/\s+$//;
    next unless length;


    if ( /87\.123\.523463\.1231/ ... /server_name/ )
    {
        unshift ( @arr, $_ );
    }
}


for ( @arr )
{
    s/^proxy.*$//;
    print $_, "\n";
}

выхлоп с него:

server_name test.ru
location /

server_name test2.ru
location /

server_name test6.ru
location /some

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру