grep排序过滤器文件名

时间:2018-06-21 21:14:02

标签: vim 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

我需要列出所有群集下有多个'>'的列表。

我使用了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命令解决此问题?

1 个答案:

答案 0 :(得分:1)

您可以创建具有以下条件的正则表达式来匹配不需要的行:

  • 从以>作为第一个字符的行开始,并与整行匹配
  • 匹配以0开头的完整行
  • 匹配一个>,但不计算它。

这将与您不需要的组匹配,最后一项是关键:它与下一个组的开头匹配,从而确保当前组只有一个子行。

然后您可以一无所有地替换此匹配项,从而有效删除<2组。在Vim中:

:%s/^>.*\n0.*\n\ze>//