我想在使用vi编辑器时,在文件中搜索字符串并找出其出现次数。
替换命令的语法是
:%s/模式/替换文本/标志
n
标志。要计算单词数,请使用:
You need the n
flag. To count words use:
:%s/\i\+/&/gn
一个特定的单词:
:%s/the/&/gn
参见count-items
文档章节。
如果您只是简单地输入:
%s/pattern/pattern/g
在 vi 中,状态行将告诉您匹配项的数量。
:%s/string/string/g将会得到答案。
%s/string//ng
。 - slm(与Gustavo所说的类似,但另外还有:)
对于任何以前的搜索,您只需简单地执行以下操作:
:%s///gn
不需要模式,因为它已经在搜索寄存器(@/
)中了。
"%" - 在整个文件中进行 s/
操作
"g" - 全局搜索(一行中有多个匹配项)
"n" - 防止对 s/
进行任何替换 -- 不会删除任何内容! 无需撤销操作!
(更多信息请参见 :help s_flag
)
(这种方式完全可以与"查找可视化选定的文本"搭配使用,详见vim-wikia tip171)
简短回答:
:%s/要搜索的字符串//gn
学习用途:
:
您正在从命令
模式进入命令行
模式。现在,您在:
后面输入的任何内容都在CLI(命令行界面)上。%s
指定所有行。将范围指定为%
表示在整个文件中进行替换。所有出现次数替换的语法为:%s / old-text / new-text / g
g
指定行中的所有出现次数。使用g
标志,您可以使整行被替换。如果不使用此g
标志,则仅替换行中的第一个出现。n
指定输出出现次数的数量//
双斜杠表示省略替换文本
。因为我们只想查找。一旦得到出现次数,您可以按N
键逐个查看出现次数。
要查找和计算特定范围内的行号1到10:
:1,10s/hello//gn
%
将被替换为逗号,
分隔的行号。要在特定范围的行号1到10中查找和替换:
:1,10s/helo/hello/gn
用法
:%s/模式/\0/g
当模式字符串过长,而你又不愿意再次输入全部内容时使用。
:g/xxxx/d
我建议做以下操作:
*
进行“有界搜索”来查找光标下的内容,或者使用标准的/pattern
搜索。:%s///gn
来获取匹配次数。或者你可以使用:%s///n
来获取包含匹配行数的数量。** 我真的希望能找到一个插件,在每次搜索时都会给出“在N2行中匹配了N1个”的消息,但是可惜没有。
注意:
不要被输出的复杂措辞所困扰。前一条命令可能会给出类似于3行中有4个匹配项
的结果,而后一条命令可能会给出3个匹配项
的结果。虽然后一种方式从技术上讲是准确的,但它具有误导性,并且应该说成“3行匹配”。因此,正如您所看到的,实际上没有必要使用后一种(仅使用“n”)形式。通过使用“gn”形式,您可以更清晰地获得相同的信息。
:g/xxxx/d
) 糟糕、危险,比此页面上其他选项都要劣。请取消选择该答案。 - Bruno Bronosky