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, 이는 내가 찾고 있는 것과 가장 가깝지만 두 줄을 어떻게 일치시키는지 잘 모르겠습니다. 중첩된 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

가상 호스트 정의가 빈 줄로 구분되어 있다고 판단되면 입력 파일을 하나 이상의 빈 줄로 구분된 줄 덩어리로 분할하고 Not 대신 덩어리 단위로 파일을 처리하는 Perl의 "단락 모드" slurp를 사용할 수 있습니다. 한 줄씩(이것이 아마도 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

관련 정보