Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
行之间的perl行匹配_Perl_Shell_Grep - Fatal编程技术网

行之间的perl行匹配

行之间的perl行匹配,perl,shell,grep,Perl,Shell,Grep,我有一份档案 Sun Sep 9 12:34:42 2012 : Sun Sep 9 12:34:42 2012 : [Req] Send Bcast Sun Sep 9 12:34:32 2012 : RX FROM :152.14.189.4 MESG: Sun Sep 9 12:34:32 2012 : info Sun Sep 9 12:34:32 2012 : #ip=1.1.1.4 Sun Sep 9 12:34:32 2012 : RX FROM :13 S

我有一份档案

Sun Sep  9 12:34:42 2012 : Sun Sep  9 12:34:42 2012 : [Req] Send Bcast 
Sun Sep  9 12:34:32 2012 : RX FROM :152.14.189.4 MESG: 
Sun Sep  9 12:34:32 2012 : info  
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.4 
Sun Sep  9 12:34:32 2012 : RX FROM :13 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.13  
Sun Sep  9 12:34:32 2012 : RX FROM :9 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.9  
Sun Sep  9 12:34:32 2012 : RX FROM :14 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.14 
Sun Sep  9 12:34:32 2012 : RX FROM :5 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.5 
Sun Sep  9 12:34:35 2012 : Reply back to 9 
Sun Sep  9 12:34:35 2012 : Reply back to 13
Sun Sep  9 12:34:36 2012 : Reply back to 14
Sun Sep  9 12:34:37 2012 : Reply back to 1.1.1.4 
Sun Sep  9 12:34:37 2012 : Reply back to 5 
Sun Sep  9 12:34:42 2012 : Sun Sep  9 12:34:42 2012 : [Req] Send Bcast 
Sun Sep  9 12:34:32 2012 : RX FROM :152.14.189.4 MESG: 
Sun Sep  9 12:34:32 2012 : info  
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.5 
Sun Sep  9 12:34:32 2012 : RX FROM :13 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.9  
Sun Sep  9 12:34:32 2012 : RX FROM :9 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.4  
Sun Sep  9 12:34:32 2012 : RX FROM :14 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.13 
Sun Sep  9 12:34:32 2012 : RX FROM :5 
Sun Sep  9 12:34:32 2012 : #ip=1.1.1.14 
Sun Sep  9 12:34:35 2012 : Reply back to 9 
Sun Sep  9 12:34:35 2012 : Reply back to 14
Sun Sep  9 12:34:36 2012 : Reply back to 13
Sun Sep  9 12:34:37 2012 : Reply back to 4 
Sun Sep  9 12:34:37 2012 : Reply back to 5 
在两行“Bcast”之间,我需要搜索一个值,比如1.1.1.4,如果它在ip=1.1.1.1处都存在,则返回1.1.1.4。然后我需要忽略那一组。否则,我需要将差异写入两个单独的文件中。我试着用perl来做这件事。当我尝试在Bcast和Bcast之间搜索时,没有打印任何内容。我遗漏了什么吗? 这是我写的

open my $in,'<',$ARGV[0];
open my $out,'>',"File2.txt";
my $Flag =0;
while(<$in>){
        if (/Bcast/ .. /Bcast/)
        {
          print ;
          if ( ($_ =~ m{ ip=1\.1\.1\.4 }xms) )
          {
                  $Flag=$Flag+1;
                  print " \nMatch is Found !!! Hurray \n" if ($Flag==2);
          }       
        } 
      $Flag=0;
}   
打开我的$in',“File2.txt”;
我的$Flag=0;
while(){
如果(/Bcast//Bcast/)
{
印刷品;
if($uz=~m{ip=1\.1\.1\.4}xms))
{
$Flag=$Flag+1;
如果($Flag==2),则打印“\n找到匹配!!!万岁\n”;
}       
} 
$Flag=0;
}   

请帮助我/Bcast/将在同一行上启动和停止<代码>/Bcast//Bcast/更有希望,但随后您会意识到您正在跳过每一个块

事实上,一旦你找到第一个,你总是在一个Bcast块中,所以你不应该试图用触发器来确定你是否在一个Bcast块中

# 0: Haven't see Bcast
# 1: Haven't seen "#ip=1.1.1.4" in this Bcast.
# 2: Haven't seen "Reply to 1.1.1.4" in this Bcast.
# 3: Found match
my $state = 0;  
while (<>) {   
    if (/Bcast/) {
       $state = 1;
    }

    if ($state == 1) {
       if (/ : \#ip=(\S+)/ && $1 eq '1.1.1.4') {
          $state = 2;
       }
    }
    elsif ($state == 2) {
       if (/ : Reply back to (\S+)/ && $1 eq '1.1.1.4') {
          $state = 3;
          print("Found match\n");
       }
    }
}
#0:尚未看到Bcast
#1:在本次广播中没有看到“#ip=1.1.1.4”。
#2:在本Bcast中未看到“回复1.1.1.4”。
#3:找到匹配项
我的$state=0;
而{
如果(/Bcast/){
$state=1;
}
如果($state==1){
如果(/:\ \ ip=(\S+/&&&$1等式'1.1.1.4'){
$state=2;
}
}
elsif($state==2){
如果(/:回复(\S+/&&&$1等式'1.1.1.4'){
$state=3;
打印(“找到匹配项”);
}
}
}

注意:您的原始代码可能会意外匹配
1.1.1.43

/Bcast//Bcast/
将在同一行上启动和停止<代码>/Bcast//Bcast/更有希望,但随后您会意识到您正在跳过每一个块

事实上,一旦你找到第一个,你总是在一个Bcast块中,所以你不应该试图用触发器来确定你是否在一个Bcast块中

# 0: Haven't see Bcast
# 1: Haven't seen "#ip=1.1.1.4" in this Bcast.
# 2: Haven't seen "Reply to 1.1.1.4" in this Bcast.
# 3: Found match
my $state = 0;  
while (<>) {   
    if (/Bcast/) {
       $state = 1;
    }

    if ($state == 1) {
       if (/ : \#ip=(\S+)/ && $1 eq '1.1.1.4') {
          $state = 2;
       }
    }
    elsif ($state == 2) {
       if (/ : Reply back to (\S+)/ && $1 eq '1.1.1.4') {
          $state = 3;
          print("Found match\n");
       }
    }
}
#0:尚未看到Bcast
#1:在本次广播中没有看到“#ip=1.1.1.4”。
#2:在本Bcast中未看到“回复1.1.1.4”。
#3:找到匹配项
我的$state=0;
而{
如果(/Bcast/){
$state=1;
}
如果($state==1){
如果(/:\ \ ip=(\S+/&&&$1等式'1.1.1.4'){
$state=2;
}
}
elsif($state==2){
如果(/:回复(\S+/&&&$1等式'1.1.1.4'){
$state=3;
打印(“找到匹配项”);
}
}
}

请注意,您的原始代码可能会意外匹配
1.1.1.43

耶。。现在我意识到。。基本上两个定界符不能相同:(…让我试着更改它..我确信它会工作!!谢谢..是的..现在我意识到..基本上两个定界符不能相同:(…让我试着更改它..我确信它会工作!!谢谢..没有必要显式打开
$ARGV[0]
。只需使用
while()
读取
@ARGV
中的所有文件。无需显式打开
$ARGV[0]
。只需使用
while()
读取
@ARGV
中的所有文件即可。