>Приветствую.
>Есть 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";
}
}