Dividindo o Apache Vhosts em arquivos individuais

0

Eu tenho vários vhosts em um arquivo que estou procurando dividir cada um em um arquivo próprio correspondente ao ServerName . Eu estou olhando para levar este arquivo

<VirtualHost *:80>
  ServerName host1.example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName host2.example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName hostN.example.com
</VirtualHost>

para subfiles host1.example.com ... hostN.example.com .

Eu olhei para essa pergunta -answer , que está mais próximo do que estou procurando, mas não tenho certeza de como combinar duas linhas. Ele tentou uma instrução if aninhada,

gawk '{
  if(match($0, /(\<VirtualHost \*:80\>)/, v)){
    if(match($0, /  ServerName (.*)/, s)){
      name=s[1]
      {print name}

    }}}
' samplevhost

e

gawk '{
  if(match($0, /(\<VirtualHost \*:80\>)(\n  )(ServerName)(.*)/, k)){
      name=k[1]
      {print name}

    }}
' samplevhost

para imprimir na tela, mas não recebo nenhuma saída. O que estou perdendo?

    
por KM. 05.08.2013 / 19:40

1 resposta

1

Se tiver certeza de que as definições de vhost estão separadas por uma linha vazia, você pode usar o "modo de parágrafo" de Perl que segmenta seu arquivo de entrada em partes de linhas separadas por uma ou mais linhas vazias e processa o pedaço de arquivo -by-chunk em vez de linha por linha (o que provavelmente está causando falha no script gawk ). Use -n00 (consulte perlrun(1) ) para processar o arquivo "parágrafo a parágrafo":

perl -n00 -e '
    /ServerName\s+(.*)/;
    $file = $1;
    open $fh,">",$file or die "Failed to open file $file for writing: $!\n";
    print $fh $_;
    close $fh' your_file_here
    
por 05.08.2013 / 19:53