grep -rc 不起作用;计算目录中的匹配数

grep -rc 不起作用;计算目录中的匹配数

我想计算目录中匹配的数量。

grep -rn 'hello' .工作正常,打印行号并递归地遍历当前目录。

grep -rc 'hello' .另一方面,似乎打印出当前目录中的每个文件而不返回计数。

有一个类似的问题和答案grep -r <pattern> <directory>这显示了一种通过管道传输to的结果来做到这一点的方法wc -l,但我想知道为什么我上面的命令不起作用,以及是否有一种方法可以仅使用 grep 选项来做到这一点。

答案1

这是预料之中的。

grep -r -n将执行递归grep,显示与给定模式匹配的行,并以文件名和行号为前缀。它会为您提供每个文件中匹配的每一行。

-n 每个输出行前面都有其在文件中的相对行号,从第 1 行开始。对于每个处理的文件,行号计数器都会重置。

grep -r -c将执行递归grep,显示所有考虑的文件的文件名,后跟该文件中模式的匹配数。它将为每个文件提供一行。

-c 仅将所选行的计数写入标准输出。

要获取特定目录中任何文件中模式的匹配数(递归地),您可以将结果提供grep -rwc -l在您链接到的答案中建议

$ grep -r 'pattern' . | wc -l

只使用grep为了达成这个:

$ grep -r 'pattern' . | grep -c 'pattern'

wc尽管当使用正则表达式引擎来计算换行符是“适合这项工作的工具”时,使用正则表达式引擎来完成这项工作肯定是矫枉过正。

请注意,还有一个-o标志grep

-o 打印每个匹配项,但仅打印匹配项,而不是整行。

如果您想分别计算每行上的每个单独的匹配项,这可能很有用:

$ grep -r -o 'pattern' . | wc -l

例如,比较以下两个grep调用(在bash或 中ksh93):

$ grep 'l' <<<"Hello world!" | wc -l
1

$ grep -o 'l' <<<"Hello world!" | wc -l
3

相关内容