Добрый день, есть вот такое задание:есть конфиг nginx вида
server_name test.ru
location /
proxy_pass http://87.123.523463.1231location /some
proxy_pass http://87.3231.561262.6262626server_name test2.ru
location /
proxy_pass http://87.123.523463.1231location /some
proxy_pass http://123.457457.47474.2414
нужно распарсить конфиг nginx так, чтобы выводились все server_name, в которых встречается proxy_pass http://87.123.523463.1231собственно вопрос: какими средствами можно искать секцию server_name вверху от нужного proxy_pass ?
grep -F -B `sed -n '$=' nginx.conf` 'http://87.123.523463.1231' nginx.conf | grep 'server_name'не, так не катит.
Конкретно в вашем примере, достаточно было бы -B 3 , но конфиг nginx может быть другим ((
> 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 -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 найдет.
>> 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