递归Grep仅显示总匹配计数

时间:2013-04-21 00:41:58

标签: bash shell grep

我正在尝试进行递归grep搜索,例如:

grep -r -c "foo" /some/directory

给我输出auch为:

/some/directory/somefile_2013-04-08.txt:0
/some/directory/somefile_2013-04-09.txt:1
/some/directory/somefile_2013-04-10.txt:4
...etc

但是,我想获得所有文件中的匹配总数,例如:

Total matches:    5

我已经玩了一些其他的例子,比如in this thread,虽然我似乎无法做到应该这么简单的事情。

4 个答案:

答案 0 :(得分:24)

grep -ro "foo" /some/directory | wc -l | xargs echo "Total matches :"

-o grep选项打印所有文件中现有字符串的出现次数。

答案 1 :(得分:6)

直接去grep。

grep -r "foo" /some/directory | grep -c "foo"

答案 2 :(得分:3)

matches=$(grep -rch "foo" /some/directory | paste -sd+ - | bc)
echo "Total matches: $matches"

粘贴/ bc部分总结了一个数字列表。请参阅:Bash command to sum a column of numbers

答案 3 :(得分:2)

如果您只需要总数,则可以跳过获取每个文件的计数,并获得匹配行的总数:

grep -r "foo" /some/directory | wc -l