+ -
当前位置:首页 → 问答吧 → 求助:一个匹配的问题

求助:一个匹配的问题

时间:2010-12-28

来源:互联网

  1. <VirtualHost 204.188.247.4>
  2.         VirtualDocumentRoot /home/abc.info
  3.         ServerName www.abc.info
  4.         ServerAlias abc.info
  5.         <Directory "/home/abc/abc.info">

  6.     Options  FollowSymLinks
  7.     AllowOverride All

  8.     Order allow,deny
  9.     Allow from all

  10.         </Directory>
  11. </VirtualHost>
  12. <VirtualHost 204.188.247.5>
  13.         VirtualDocumentRoot /home/abc.net
  14.         ServerName www.abc.net
  15.         ServerAlias abc.net
  16.         <Directory "/home/abc.net">

  17.     Options  FollowSymLinks
  18.     AllowOverride All

  19.     Order allow,deny
  20.     Allow from all

  21.         </Directory>
  22. </VirtualHost>
  23. <VirtualHost 204.188.247.57>
  24.         VirtualDocumentRoot /data0/web/abc.com
  25.         ServerName   www.abc.com
  26.         ServerAlias    abc.com
  27.         <Directory "/data0/web/abc.com">

  28.     Options  FollowSymLinks
  29.     AllowOverride All

  30.     Order allow,deny
  31.     Allow from all

  32.         </Directory>
  33. </VirtualHost>
复制代码
如上面一段文本,如何提取匹配/home/目录的 提取出  ServerName   的网址   /data0/下的不匹配

提出的格式例如:
/home/abc.net   www.abc.net
/home/abc.info   www.abc.info
.....

作者: mcshell   发布时间: 2010-12-28

本帖最后由 午夜凋零 于 2010-12-29 10:35 编辑
  1. #!/usr/bin/perl -w

  2. open FI, "1";
  3. open FO, ">2";
  4. while(<FI>){
  5.   if(/VirtualDocumentRoot (.*)/){
  6.     if(/VirtualDocumentRoot\s\/data0\//){
  7.       $flag = 0;
  8.     }
  9.     else{
  10.       $flag = 1;
  11.       print FO $1;
  12.     }
  13.   }
  14.   if((/ServerName (.*)/) and ($flag eq 1)){
  15.     print FO " $1$/";
  16.   }
  17. }
  18. close FI;
  19. close FO;
复制代码

作者: 午夜凋零   发布时间: 2010-12-29



QUOTE:
午夜凋零 发表于 2010-12-29 10:29




    谢谢,不过好像不行呀。

作者: mcshell   发布时间: 2010-12-29



QUOTE:
谢谢,不过好像不行呀。
mcshell 发表于 2010-12-29 10:49




是只匹配“/home/”下的,还是只不匹配“/data0/”下的?

作者: 午夜凋零   发布时间: 2010-12-29



QUOTE:
是只匹配“/home/”下的,还是只不匹配“/data0/”下的?
午夜凋零 发表于 2010-12-29 10:59




     只匹配home下的。。data0下的不提取

作者: mcshell   发布时间: 2010-12-29

shell版块有人用perl
  1.   while(<>){
  2.   if(m{Root (/home/.+)}){
  3.     print "$1\t";
  4.     $sNext = <>;
  5.     (undef,undef,$sServerName) = split /\s+/,$sNext;
  6.     print "$sServerName\n";
  7.   }
  8. }
复制代码
在此引用下。。谢谢 jason680

作者: mcshell   发布时间: 2010-12-29



QUOTE:
只匹配home下的。。data0下的不提取
mcshell 发表于 2010-12-29 11:03




    那你的data0目录在不在home下面?

作者: 午夜凋零   发布时间: 2010-12-29



QUOTE:
那你的data0目录在不在home下面?
午夜凋零 发表于 2010-12-29 11:09




    嗯 是的 你可以看下上面的代码的输出结果 ,就是那个样子的。。

作者: mcshell   发布时间: 2010-12-29



QUOTE:
shell版块有人用perl在此引用下。。谢谢 jason680
mcshell 发表于 2010-12-29 11:05




    想法是好的,你测过了吗

作者: langren868   发布时间: 2010-12-29



QUOTE:
嗯 是的 你可以看下上面的代码的输出结果 ,就是那个样子的。。
mcshell 发表于 2010-12-29 11:12

  1. #!/usr/bin/perl -w

  2. open FI, "1";
  3. open FO, ">2";
  4. while(<FI>){
  5.   if(/VirtualDocumentRoot\s(\/home\/.*)/){
  6.     if(/\/data0\//){
  7.       $flag = 0;
  8.     }
  9.     else{
  10.       $flag = 1;
  11.       print FO $1;
  12.     }
  13.   }
  14.   if((/ServerName (.*)/) and ($flag eq 1)){
  15.     print FO " $1$/";
  16.     $flag = 0;
  17.   }
  18. }
  19. close FI;
  20. close FO;
复制代码
这个应该行了吧。

作者: 午夜凋零   发布时间: 2010-12-29