我有一个包含以下数据的文件。
>Cluster 1
0 1a, >bcd
>Cluster 2
0 1a, >cfg
>Cluster 3
0 5a, >jkl
1 8a, >lmk
2 3a, >qwe
3 9a, >oiu
我需要列出所有群集下有多个'>'的列表。
我使用了grep '>' 'filename'|grep '>'|grep '>'
,但这又给出了相同的确切列表:
>Cluster 1
0 1a, >bcd
>Cluster 2
0 1a, >cfg
>Cluster 3
0 5a, >jkl
1 8a, >lmk
2 3a, >qwe
3 9a, >oiu
但是输出应该仅是集群3:
>Cluster 3
0 5a, >jkl
1 8a, >lmk
2 3a, >qwe
3 9a, >oiu
如何使用grep和/或其他vim命令解决此问题?
答案 0 :(得分:1)
您可以创建具有以下条件的正则表达式来匹配不需要的行:
>
作为第一个字符的行开始,并与整行匹配>
,但不计算它。这将与您不需要的组匹配,最后一项是关键:它与下一个组的开头匹配,从而确保当前组只有一个子行。
然后您可以一无所有地替换此匹配项,从而有效删除<2组。在Vim中:
:%s/^>.*\n0.*\n\ze>//