perl + shell脚本+删除除了第一行uniq(FILE NAME)+ shell脚本中的perl之外的所有非uniq行

时间:2010-06-15 13:34:46

标签: perl

我有以下文件,除了第一个唯一sed之外,如何删除FILE NAME所有FILE NAME行。例如,需要从文件中删除所有FILE NAME行除外第一个:

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file

FILE NAME: /dirA/dirB/dirC/dirD/dirE/file

文件:

  

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

     

参数名称:blablabla

     

目标文件:12

     

消息来源:565

     

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

     

参数名称:blablabla

     

目标文件:18

     

SOURCE FILE:552

     

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

     

参数名称:blablabla

     

目标文件:14

     

消息来源:559

     

文件名:/ dirA / dirB / dirC / dirD / dirE / file

     

参数名称:blablabla

     

目标文件:134

     

SOURCE FILE:344

     

文件名:/ dirA / dirB / dirC / dirD / dirE / file

     

参数名称:blablabla

     

目标文件:13

     

消息来源:445

     

文件名:/ dirA / dirB / dirC / dirD / dirE / file

     

参数名称:blablabla

     

目标文件:13

1 个答案:

答案 0 :(得分:0)

$line_count = 0;
open (OLD_FILE, "<$old_file") or die ("Could not open $old_file.");
open (NEW_FILE, ">$new_file") or die ("Could not open $new_file.");
while (<OLD_FILE>) {
    chomp ($_);
    if ($_ =~ /^FILE NAME/) {
        $line_count++;
        if ($line_count > 1) {
            next;
        }
    }
    print NEW_FILE "$_\n";
)
close (FILE);

这会在旧文件的每一行上进行模式匹配。如果该行以“FILE NAME”开头并且我们已经匹配了一次,那么它不会再将这些行打印到我们的新文件中。