如何使用 Vim 查找某个字符出现次数超过 N 次的所有行

如何使用 Vim 查找某个字符出现次数超过 N 次的所有行

我试图找出文件中所有|出现 (管道) 字符超过 21 次的行。该|字符是字段分隔符,因此实例之间可能没有特定的字符数|。在 Vim 中有没有简单的方法可以做到这一点?

注意:我在 Windows 机器上使用 gVim,因此无法使用任何 *nix 特定的技巧。

短暂性脑缺血发作

答案1

您可以使用正则表达式通过常规搜索功能查找此类行:

/\v(\|[^|]*){21,}

确保\v正则表达式无论选项的值如何都能起作用(它使所有非字母数字字符(下划线除外)变得特殊;我在这里也使用它来避免在、、和magic之前加上反斜杠)。(){}

如果您想一次查看所有这些行,那么您可以将其与以下:g命令组合:

:g/\v(\|[^|]*){21,}/p

顺便说一句,这种类型的命令(来自前任前身) 是该工具名称的由来grepg/re/p:re 是 regexp 的缩写)。


如果您的源数据是“管道分隔的”,那么您可能应该检查是否有任何值嵌入了管道字符(可能通过转义(例如以反斜杠为前缀)、加倍或引用来完成)。上面的正则表达式方法可以扩展以涵盖大多数转义和加倍方法,但解析引用的值通常需要比大多数正则表达式语言所能提供的更强大的表达能力。

相关内容