Apache仮想ホストを別々のファイルに分割する

Apache仮想ホストを別々のファイルに分割する

ファイルに複数の仮想ホストがあり、各仮想ホストを.を含むファイルに分割したいと思いますServerName。このファイルを探しています。

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

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

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

サブファイルとしてhost1.example.com....hostN.example.com

私はこれを見たQ&A、これは私が探しているものに最も近いですが、2行をどのように一致させるのかわかりません。入れ子になったif文を試しましたが、

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

    }}}
' samplevhost

そして

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

    }}
' samplevhost

画面に印刷されますが、出力は出ません。私は何を見逃していますか?

ベストアンサー1

仮想ホスト定義が空行で区切られていると判断した場合は、入力ファイルを1つ以上の空行で区切られた行の塊に分割し、Notの代わりにファイルをファイルごとに処理するPerlの「ショートモード」slurpを使用できます。 1行ずつ(これはおそらくgawkスクリプトの失敗の原因です)。以下を使用して「セクションごとに」ファイルを処理します-n00(参照)。perlrun(1)

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

おすすめ記事