搜索字符串并在vi编辑器中计数


105

我想使用vi编辑器搜索字符串并查找文件中的出现次数。


11
:g/xxxx/d在此页面上选择的答案()糟糕,危险且不如其他人。请取消选择它。
布鲁诺·布罗诺斯基

1
我同意,它只告诉您“行已删除”而不是“事件已删除”
user1709076 '17

Answers:


4
:g/xxxx/d

这将删除所有带有模式的行,并报告删除了多少行。撤消之后再找回。


6
当然,他可以省略“ d”,因此不必进行操作。
Rook

15
请注意,这仅告诉您多少行,而不是多少次出现。我认为德克的是更好的解决方案。

4
我下面的解决方案可以正确地计算一行中的多次出现,并且没有什么可以撤消的。
Mohit Chakraborty

6
非常危险:o
Ankit Zalani 2015年

1
这不应该是公认的/最受欢迎的答案。SO主持人的职责是什么?:(
user1412066 '17


121

您需要n标志。要计算单词,请使用:

:%s/\i\+/&/gn   

和一个特定的词:

:%s/the/&/gn        

请参阅count-items文档部分。

如果您只输入:

%s/pattern/pattern/g

那么状态行也将为您提供vi中的匹配次数。


看来此答案适用于Vim用户,而不适用于Vi :(
kadeshpa

您的系统上只有vi吗?哪个版本?
2009年

有人在其中用vim标记了您的问题...我将其删除了。
ojblass


23

(类似于Gustavo所说的,但另外:)

对于任何以前的搜索,您可以简单地执行以下操作:

:%s///gn

不需要模式,因为它已经在搜索寄存器(@/)中。

“%”- s/在整个文件中执行
“ g”-全局搜索(一行中有多个匹配项)
“ n”-防止任何替换s/- 不会删除任何内容!一切都必须撤消!
(请参阅::help s_flag更多信息)

(通过这种方式,它可以与“ 搜索视觉选择的文本 ” 完美配合,如vim-wikia tip171中所述


3


:%s / pattern / \ 0 / g

当模式字符串太长而您又不想再次输入时。


1

简短答案

:%s /待搜索字符串// gn

学习

VI编辑器中有以下三种模式 在此处输入图片说明

  • :您正在从Command进入Command-line模式。现在,您编写的任何内容:都在CLI(命令行界面)上
  • %s指定所有行。将范围指定为%意味着在整个文件中进行替换。所有出现替换的语法是:%s/old-text/new-text/g
  • g指定该行中所有出现的事件。使用gflag,您可以替换整行。如果g不使用此标志,则仅替换该行中的首次出现。
  • n 指定输出出现次数
  • //双斜杠表示省略replacement text。因为我们只想找到。

获得事件数后,您可以N按键来一对一查看事件。

为了查找和计数1至10行的特定范围:

:1,10s / hello // gn

  • 请注意,%整个文件都由,单独的行号补充。

为了查找和替换特定范围的行号1至10:

:1,10s / helo / hello / gn


0

我建议这样做:

  1. 搜索可以*对光标下方的内容进行“边界搜索”,也可以进行标准/pattern搜索。
  2. 使用:%s///gn得到的出现次数。或者,您可以:%s///n用来获取出现次数的行数。

**我真的可以找到一个插件,该插件在每次搜索时都会给出“ 在N 2行中匹配N 1的N 1 ”的消息,但是可惜。

注意:不要对输出的措辞感到困惑。前一个命令可能会给您一些类似于4 matches on 3 lines后者可能给您的东西3 matches on 3 lines。尽管从技术上讲是准确的,但后者具有误导性,应说“ 3行匹配”。因此,正如您所看到的,实际上根本不需要使用后者(仅'n')形式。通过使用“ gn”表单,您可以更清楚地获得相同的信息,并且获得更多的信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.