删除包含相同字符串的行

时间:2016-02-17 23:42:45

标签: regex perl

如果行IN(..)和行OUT(..)的括号中包含相同的字符串,请删除行OUT(..)

我的输入文件如下:

IN(ABC); 
IN(DEF);        
IN(FGH);        
OUT(QWE);       
OUT(ABC);       
OUT(DEF);

我想要的输出是:

IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);

1 个答案:

答案 0 :(得分:-1)

假设所有IN(...)行都在OUT(...)行之前(即已排序),以下内容应该有效:

my %in;
while (<DATA>) {
    if (/^IN\((.*?)\)/) {
        $in{$1} = 1;
    } elsif  (/^OUT\((.*?)\)/) {
        if ($in{$1}) {
            next;
        }
    }
    print $_;
}

__DATA__
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
OUT(ABC);
OUT(DEF);

我们的想法是使用哈希来跟踪已使用的IN个值。逐行浏览数据,如果是IN行,则存储该值并打印该行。如果它是OUT行并且不在已识别的IN值列表中,请将其打印出来,否则请跳过它。