使用 grep 计算匹配的总数,而不是仅计算匹配的行数

使用 grep 计算匹配的总数,而不是仅计算匹配的行数

grep 是否提供了一种方法来计算它所匹配的总数? -c 选项仅返回与正则表达式匹配的行数,但在本例中,每行有多个匹配项。

答案1

尝试这个:

grep -o -E "your expression" file |wc -l

嗯,-E 只是一个例子,它可以是 -P,-F 等等。重点是 -o

测试:

kent$  echo "abc xxx yyy"|grep -cP "[a-z]{3}"      
1

kent$  echo "abc xxx yyy"|grep -oP "[a-z]{3}"|wc -l
3

答案2

有一个 -o 标志,表示只应打印该行匹配的子部分。

将其与 wc -l 结合使用:

grep -o "part of line" | wc -l

人grep也解释了这一点。

答案3

作为其他答案的替代,只使用 grep:

grep -o "seach pattern" somefile.txt | grep -c ""

第一个 grep 中的 -o 输出每个匹配项,并且仅输出匹配项 - 而不是整行(当然,除非整行就是匹配项)。然后第二个 grep 中的 -c 会计算它们。

需要输入的字符比较多(例如 4 或 5 个),但我发现这样更容易记住。

相关内容