如何使用 Linux 的 grep 计算字符串的所有匹配项如何使用 Linux 的 grep 计算字符串的所有匹配项如何使用 Linux 的 grep 计算字符串的所有匹配项如何使用 Linux 的 grep 计算字符串的所有匹配项
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 Linux 的 grep 计算字符串的所有匹配项

grep 是一种文本搜索实用程序,可以同时处理标准输入或多个文件。它用于打印模式、字符串或正则表达式的匹配项。计算匹配次数通常很有用,grep 可以很容易地做到这一点。

使用 grep 计算匹配项

grep 命令具有 -c 标志,它将计算匹配的行数并打印出一个数字。这对很多事情都很有用,例如通过日志文件搜索来自粒子 IP、端点或其他标识符的条目数。

grep -c "1.2.3.4" /var/log/nginx/access.log

但是,grep 能够每行匹配多次。如果您使用 -o 标志,grep 将为每个匹配打印出一个新行。这不适用于 -c 标志,因为它只会计算匹配的 行,而不是每行的多个匹配项。

更好的解决方案是将 wc(字数统计)实用程序与 -l(行数)参数一起使用,它将计算原始字数通过标准输入传递给它的行。使用 wc -l 是首选解决方案,因为它与 -o 一起使用以计算给定字符串或模式在整个文件中出现的次数。

grep -o "foo" file | wc -l

跨多个文件计数

grep 的一个很好的特性是能够同时处理多个文件,这些文件可以通过 xargs、参数传递,也可以通过通配符扩展提供。处理多个文件时,grep 会在匹配前打印出文件名。当使用 -c 计算匹配行数时,它还会打印出文件名:

grep "foo" ./*.txt -cH

在处理多个文件的可能性时,您应该始终使用 -H 标志,因为即使只有一个文件传递给 grep,它也会始终打印文件名。如果您依赖于那里的文件名,这将防止自动化中断。

如果您想使用 -o 计算每行的多个匹配项,并将输出传递给 wc -l,您将无法看到每个单独文件的编号与 -c 类似。但是,通过一些脚本,您可以使用 cut 截断第一列,并使用 uniq -c 计算每个文件名的唯一出现次数:

grep "foo" ./*.txt -o | cut -d ':' -f 1 | uniq -c
©2015-2025 艾丽卡 support@alaica.com