Приветствую.
Есть httpd.conf в котором ~200 виртхостов.
Каждый хост, естественно, с уникальным ServerName.
Нужно как-то придумать на shell и получить либо в массив строк, либо (в крайнем случае) одной строкой виртхост с нужным ServerName, то бишь все, что между <VirtualHost> и </VirtualHost> для этого домена.
У меня идеи кончились, есть догадка, что это легче делать на перле, но тогда надо будет переделывать все остальное - а это лень.
Поделитесь мыслями?)
sed -n '/^<VirtualHost foo.bar>/,/^<\/VirtualHost>/p' httpd.confРегулярки по вкусу. Не проверял.
>sed -n '/^<VirtualHost foo.bar>/,/^<\/VirtualHost>/p' httpd.conf
>
>Регулярки по вкусу. Не проверял.<VirtualHost IP:port>
IP у тачки один, вхостов на нем много. Не катит.
>>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'
>Приветствую.
>Есть 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";
}
}