如何使用 perl 脚本从文件中删除选定的重复行

How to delete selected duplicated line from file using perl script

假设我的文件 a.txt 包含以下内容。

aa
aa
bb
cc
dd
ee
ff
ee
gg

我想要以下输出 -

aa
aa
bb
cc
dd
ee
ff
gg

请注意,我只想删除特定的重复行:ee。 我怎么能在我尝试过的一种班轮之后做到这一点。

perl -ne 'print unless $a{$_}++' a.txt

但它正在删除所有重复的行。

要仅删除特定(“目标”)行的重复项,请添加该条件

perl -lne'$tgt = "ee"; print unless $h{$_}++ and $_ eq $tgt' file

如果可能有多个这样的目标,则检查当前行是否匹配其中任何一个。一个很好的工具是来自 List::Util

any
perl -MList::Util=any -lne'
    $line=$_; 
    @tgt = qw(ee aa); 
    print unless $h{$line}++ and any { $_ eq $line} @tgt
' file

目标可以作为参数从命令行读取,如果不对它们进行硬编码有好处的话。

注意:在旧版本中,anyList::MoreUtils 中,而不在 List::Util 中。