怎么用perl删除包含字符串的整行

怎么用perl删除包含字符串的整行

怎么用perl删除包含字符串的整行



@spp = grep !/^\s*111111/, @sp;  #这个只能删除111111,可删除不了包含111111的整行
@spp = grep !/^.*111111.*$/, @sp;


or

@spp = grep !/111111/, @sp;


试了,不行,还是只能删除111111

例子

@sp=111111112222222222
         333333333333333333
         444444444444444444

@spp = grep !/^.*111111.*$/, @sp;

or

@spp = grep !/111111/, @sp;

@spp =2222222222
            333333333333333333
            444444444444444444

结果应该是

@spp =333333333333333333
            444444444444444444


QUOTE:
原帖由 zhaimeng 于 2007-9-18 15:26 发表
试了,不行,还是只能删除111111

例子

@sp=111111112222222222
         333333333333333333
         444444444444444444

@spp = grep !/^.*111111.*$/, @sp;

or

@spp = grep !/111111/, @sp ...

测试是没有问题的.
    my @sp = qw/111111112222222222
         333333333333333333
         444444444444444444/;
    my @spp = grep !/111111/, @sp;
    print join("\n", @spp);


把你对@sp具体赋值的代码贴出来.
&test5500|20070917|20070917
1111111111111|11111111111111111111|20070927|2000|1
2222222222222|22222222222222222222|20070927|2000|1
3333333333333|33333333333333333333|20070927|2000|1
4444444444444|44444444444444444444|20070927|2000|1
5555555555555|55555555555555555555|20070927|2000|1
6666666666666|66666666666666666666|20070927|2000|1

需要把包含&test的整行删掉  谢谢Lonki的热心帮助


QUOTE:
原帖由 zhaimeng 于 2007-9-18 15:40 发表
&test5500|20070917|20070917
1111111111111|11111111111111111111|20070927|2000|1
2222222222222|22222222222222222222|20070927|2000|1
3333333333333|33333333333333333333|20070927|2000|1
4444444444 ...

这个应该是文件中的东西,楼主说明白点......
对 这个是文件里的内容 需要把包含&test的这一行去掉 条件一定要包含&test 因为&test后面的内容是动态的

结果为
1111111111111|11111111111111111111|20070927|2000|1
2222222222222|22222222222222222222|20070927|2000|1
3333333333333|33333333333333333333|20070927|2000|1
4444444444444|44444444444444444444|20070927|2000|1
5555555555555|55555555555555555555|20070927|2000|1
6666666666666|66666666666666666666|20070927|2000|1
不能这样么:

[Copy to clipboard] [ - ]
CODE:
open(FN,"filename");
while(<FN>){
  next if /\&test/;
  print;
}



QUOTE:
原帖由 zhaimeng 于 2007-9-18 15:57 发表
对 这个是文件里的内容 需要把包含&test的这一行去掉 条件一定要包含&test 因为&test后面的内容是动态的

结果为
1111111111111|11111111111111111111|20070927|2000|1
2222222222222|22222222222222222222 ...

这个无所谓, 文件存入list.
    my @sp = `cat testfile`;  ### use type on Windows

    print @sp, "\n\n";
    my @spp = grep !/&test/, @sp;
    print @spp;


########### 运行结果 ############
&test5500|20070917|20070917
1111111111111|11111111111111111111|20070927|2000|1
2222222222222|22222222222222222222|20070927|2000|1
3333333333333|33333333333333333333|20070927|2000|1
4444444444444|44444444444444444444|20070927|2000|1
5555555555555|55555555555555555555|20070927|2000|1
6666666666666|66666666666666666666|20070927|2000|1

1111111111111|11111111111111111111|20070927|2000|1
2222222222222|22222222222222222222|20070927|2000|1
3333333333333|33333333333333333333|20070927|2000|1
4444444444444|44444444444444444444|20070927|2000|1
5555555555555|55555555555555555555|20070927|2000|1
6666666666666|66666666666666666666|20070927|2000|1
open(OUTPUTFILE, "file.txt") or die "Can't open this file";

my @output;
while (<OUTPUTFILE>) {
        my $lines = $_;
        push (@output,$_) if $lines !~ m#\&test#

}
open(INPUTFILE, ">file.txt") or die "Can't open this file";
print INPUTFILE @output;