仅获取仅出现一次的行,并删除在Vim中出现2次或更多次的所有行

时间:2015-02-11 16:53:40

标签: vim

假设我有一个文本文件:

Bar
Foo
Bar
Foo
Baz
Bar

并且我只想要不会出现超过1次的独特行

Baz

我使用:sort ui但它返回:

Bar
Baz
Foo

如何获得没有重复的行?

2 个答案:

答案 0 :(得分:3)

一些awk的时间:

:%!awk '{a[$0]++} END{ for(k in a){ if(a[k] == 1) { print k }} }'

这个想法很简单:将每一行读入哈希表作为键并增加值。这意味着该值将存储一条线被看到的次数。读完文件后,循环遍历哈希表并打印出只能看到一次的每个键。

答案 1 :(得分:2)

您需要首先对这些行进行排序,然后用空字符串替换任意行后跟任意次数的行:

e.g。

:sort i
:%s/^\(.\{-1,\}$\)\n\?\(\1$\n\?\)\+//gi