如果我在vi中有以下格式,但有数百个类别和数千个项目:
Category1
item
Category1
item
Category1
item
Category2
item
Category2
item
Category2
item
vi中是否有任何方式可以这样结束:
Category1
item
item
item
Category2
item
item
item
我需要删除除第一个类别之外的所有类别实例。我需要保留所有物品。 我尝试过补充和全球变化,但没有任何运气。非常感谢帮助,欢呼。
答案 0 :(得分:0)
假设=在类别行的末尾....
将文件保存到(例如)foo.txt在Solaris上使用nawk,而不是awk。
awk '/=$/ && !arr[$0]++ {print; next} {print $0} ' foo.txt > newfile.txt
对不起。我没有清楚的想法如何在没有大量打字工作或使用复杂的ed文件的情况下在vi / vim中执行此操作。其他人可能有想法。如果你完全陷入困境,请尝试以上方法。
答案 1 :(得分:0)
我的PatternsOnText plugin(以及其他):DeleteDuplicateLinesOf
命令。假设可以通过尾随=
检测类别(正如您在评论中指出的那样),此命令将执行:
:DeleteDuplicateLinesOf /=$/
与@ jimmcnamara的awk
解决方案一样,这仍然假设相同的类别都在文件中按顺序出现;即它不会在项目周围移动,只是删除了重复的类别行。