URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8817
[ Назад ]

Исходное сообщение
"bash vs. httpd.conf"

Отправлено localhorst , 23-Июл-10 15:16 
Приветствую.
Есть httpd.conf в котором ~200 виртхостов.
Каждый хост, естественно, с уникальным ServerName.
Нужно как-то придумать на shell и получить либо в массив строк, либо (в крайнем случае) одной строкой виртхост с нужным ServerName, то бишь все, что между <VirtualHost> и </VirtualHost> для этого домена.
У меня идеи кончились, есть догадка, что это легче делать на перле, но тогда надо будет переделывать все остальное - а это лень.
Поделитесь мыслями?)

Содержание

Сообщения в этом обсуждении
"bash vs. httpd.conf"
Отправлено phpcoder , 23-Июл-10 15:29 
sed -n '/^<VirtualHost foo.bar>/,/^<\/VirtualHost>/p' httpd.conf

Регулярки по вкусу. Не проверял.



"bash vs. httpd.conf"
Отправлено localhorst , 23-Июл-10 15:49 
>sed -n '/^<VirtualHost foo.bar>/,/^<\/VirtualHost>/p' httpd.conf
>
>Регулярки по вкусу. Не проверял.

<VirtualHost IP:port>
IP у тачки один, вхостов на нем много. Не катит.


"bash vs. httpd.conf"
Отправлено phpcoder , 23-Июл-10 16:01 
>>sed -n '/^<VirtualHost foo.bar>/,/^<\/VirtualHost>/p' httpd.conf
>>
>>Регулярки по вкусу. Не проверял.
>
><VirtualHost IP:port>
>IP у тачки один, вхостов на нем много. Не катит.

ААаа, вон оно что, Михалыч!

tac tets | sed -n '/NameServer bar/,/<VirtualHost .*>/p' | tac | head -n -1
cat tets | sed -n '/NameServer bar/,/<\/VirtualHost>/p'


"bash vs. httpd.conf"
Отправлено L0n3R4ng3r , 26-Июл-10 13:12 
>Приветствую.
>Есть httpd.conf в котором ~200 виртхостов.
>Каждый хост, естественно, с уникальным ServerName.
>Нужно как-то придумать на shell и получить либо в массив строк, либо (в крайнем случае) одной строкой виртхост с нужным ServerName, то бишь все, что между <VirtualHost> и </VirtualHost> для этого домена.
>У меня идеи кончились, есть догадка, что это легче делать на перле,
>но тогда надо будет переделывать все остальное - а это лень.
>
>Поделитесь мыслями?)

Вот на перле:

#!/usr/bin/perl

open(CFG,"<path_to_config");
my $virt = 0;
my $server_name;
my %hash;
my @array;

while(<CFG>){
    chomp();
    $_ =~ s/^\s+//g; # удаления всех пробелов/табуляций в начале строки
    if (/<VirtualHost/ or $virt = 1){
        $virt = 1;
        push(@array,$_);
        $server_name = (split(/\s+/,$_))[2] if (/ServerName/);
    }
    if (/<\/VirtualHost/) {
        $virt = 0;
        push(@{$hash{$server_name}},@array);
        my $arr_count = 0;
        foreach (@array){
            delete $array[$arr_count];
            $arr_count++;
        }
    }
}

# здесь просто вывод результата
foreach my $key (sort keys %hash){
    my $tmp_array = $hash{$key};
    print "===========SERVER NAME $key=================\n";
    foreach my $element (@$tmp_array) {
        print "$element\n";
    }
}