如何使用Windows命令行查找文件中字符串的出现次数?

Pat*_*ryk 12 windows string command-line file find

我有一个带有电子邮件地址的大文件,我想知道它们中有多少是这个文件.如何使用Windows命令行执行此操作?

我试过这个,但它只打印匹配的行.(顺便说一句:所有电子邮件都包含在一行中)

findstr /c:"@" mail.txt

Ada*_*m S 16

使用你拥有的东西,你可以通过一个管道输出结果find.我已经看到过这样的东西.

findstr /c:"@" mail.txt | find /c /v "GarbageStringDefNotInYourResults"
Run Code Online (Sandbox Code Playgroud)

因此,您要计算findstr命令产生的行,其中没有垃圾字符串.有点黑客,但它可以为你工作.或者,只需使用find /c您关心的字符串即可.最后,你提到了每行一个地址,所以在这种情况下上面的工作,但每行多个地址,这打破了.


asc*_*pfl 7

为什么不简单地使用它(它确定包含(至少)一个@字符的行数):

find /C "@" "mail.txt"
Run Code Online (Sandbox Code Playgroud)

输出示例:

---------- MAIL.TXT: 96
Run Code Online (Sandbox Code Playgroud)

为了避免输出中的文件名,请将其更改为以下内容:

find /C "@" < "mail.txt"
Run Code Online (Sandbox Code Playgroud)

输出示例:

96
Run Code Online (Sandbox Code Playgroud)

要捕获结果编号并将其存储在变量中,请使用此代码(更改%N%%N批处理文件):

set "NUM=0"
for /F %N in ('find /C "@" ^< "mail.txt"') do set "NUM=%N"
echo %NUM%
Run Code Online (Sandbox Code Playgroud)


Dig*_*Bat 5

非常简单的解决方案:

grep -o "@" mail.txt | grep -c .
Run Code Online (Sandbox Code Playgroud)

记住行尾的一个点!

这是更容易理解的方式:

grep -o "@" mail.txt | grep -c "@"
Run Code Online (Sandbox Code Playgroud)

首先 grep 只选择“@”字符串并将每个字符串放在新行上。

第二个 grep 计算行(或带有 @ 的行)。

grep的实用程序可以通过安装GnuWin项目WinGrep网站。它是非常小且安全的文本过滤器。grep 是最有用的 Unix/Linux 命令之一,我每天都在 Linux 和 Windows 中使用它。Windows findstr很好,但没有 grep 之类的功能。

如果您喜欢 CLI 或批处理脚本,在 Windows 中安装grep将是最好的决定之一。

  • “grep”不被识别为内部或外部命令、可操作程序或批处理文件。 (2认同)