Vim EX命令用于删除非重复记录

时间:2015-04-22 17:10:14

标签: regex vim

我有一个大文件,我试图减少到只有相邻的重复记录id行。 (已经分类了)

示例:

AB12345  10987654321 Andy   Male
AB12345  10987654321 Andrea Female
CD34567  98765432100 Andrea Female
EF45678  54321098765 Bobby  Tables

应删除3-4行,留下1-2行。

以下正则表达式模式只能成功找到重复的行,但后续命令会删除一些但不是所有不匹配的行。

:/\v^(\a{2}\d{5}\s{2}\d{11}).*\n(\1.*)+
:g!/\v^(\a{2}\d{5}\s{2}\d{11}).*\n(\1.*)+/d

为什么不会删除所有不匹配的行?

2 个答案:

答案 0 :(得分:1)

:global没有“神奇”版本 可能的解决方案:转义特殊字符 :g!/^(\a\{2}\d\{5}\s\{2}\d\{11}).*\n(\1.*)\+/d

您可以随时重复使用以前的查找模式,并像g://d

一样使用它

额外链接

答案 1 :(得分:1)

不是Vim解决方案,但这应该有效:

$ fgrep -f <(awk -v OFS=' ' '{print $1, $2}' data.txt | sort | uniq -d) data.txt

<(...)是一种基础,OSF=' '只有两个空格。