regex - 如何使用 perl 脚本从文件中删除选定的重复行
问题描述
假设我的文件 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
如果可能有多个这样的目标,则检查当前行是否与其中任何一个匹配。一个很好的工具any
来自List::Util
perl -MList::Util=any -lne'
$line=$_;
@tgt = qw(ee aa);
print unless $h{$line}++ and any { $_ eq $line} @tgt
' file
目标可以作为参数从命令行读取,如果不将它们硬编码有好处的话。
注意:在旧版本any
中是在List::MoreUtils中,而不是在List::Util
.
推荐阅读
- php - 使用 Doctrine2 按 Not Null 分组
- gcc - asm 指令“jmpq *0xa48201(%rip)”到底在做什么?
- c - Pthreads而不是共享变量
- spring - Kotlin - 如何将 BodyToMono 与泛型和嵌套类一起使用 WebFlux
- java - Bazel 在resin/raspberry-pi3-debian 上从头开始构建错误
- javascript - IOS页面间传递数据
- python - 尝试在 celery 任务文件中导入模型时尚未加载应用程序
- tensorflow - 关于 tf.app.flags.DEFINE_enum 的使用
- java - JavaFX 从另一个线程更新 AnchorPane
- typescript - 通用类型'AngularFirestoreDocument
' 需要 2 个类型参数