+ -
当前位置:首页 → 问答吧 → 怎样输出 匹配某行的 后面几行???

怎样输出 匹配某行的 后面几行???

时间:2010-12-29

来源:互联网

本帖最后由 nb509 于 2010-12-29 20:42 编辑
  1. ADD:1
  2. 11
  3. 22
  4. 33
  5. TEL:1
  6. 33
  7. 44
  8. 22
  9. ADD:2
  10. 33
  11. 22
  12. FAX:2
  13. 33
  14. 22
  15. 44
  16. ...
复制代码
比如我要查找输出含有ADD的行,以及他后面的几行,(后面行数不定)怎么弄啊?

结果
------
  1. ADD:1
  2. 11
  3. 22
  4. 33
  5. ADD:2
  6. 33
  7. 22
  8. ...
复制代码

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

  1. while(<FILE>){
  2. if(/TEL/ or /FAX/){$flag=0;}
  3. if(/ADD/){$flag=1; print OUT $_;} else{ if($flag==1){print OUT $_;}} }
复制代码

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

如下脚步可以达到目的:

#! perl -w
use strict;

#read all file data to a scalar
sub ReadFileData
{
        my ($filename) = @_;
        open my $fh,'<',"$filename" or die $!;
        my $contend = do{local $/; <$fh>};  #$/ is a special signal use to identify the end of the line;
        return $contend;
}

my $contendline = &ReadFileData("demo.txt");
$contendline =~ s/(TEL|FAX):\d+(.*?)(ADD|$)/\3/isg;
#$contendline =~ s/(?!ADD)(?!\d+):\d+(.*?)(ADD)/\3/isg;
print $contendline;


注: 上面的(TEL|FAX)不好,不知道怎么用非ADD的字母串代替

作者: bruce_wang_jane   发布时间: 2010-12-30