仅获取仅出现一次的行并删除在 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
假设我有一个文本文件:
酒吧 福 酒吧 福 巴兹 酒吧
并且我只想要出现次数不超过 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