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

Get only the lines that appear only once and delete all lines that have 2 or more occurrences in Vim

假设我有一个文本文件:

酒吧
福
酒吧
福
巴兹
酒吧

并且我只想要出现次数不超过 1 次的唯一行:

巴兹

我用 :sort ui 但它 returns:

酒吧
巴兹
福

如何获取没有重复的行?

是时候学习一些 awk 了:

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

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

您需要先对行进行排序,然后用空字符串替换任何重复任意次的行:

例如

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