14

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

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

这给了我输出如下:

/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

我玩过一些其他的例子,比如在这个线程中,虽然我似乎无法做应该如此简单的事情。

4

4 回答 4

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

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

于 2013-04-21T00:49:55.380 回答
9

只需管道到 grep。

grep -r "foo" /some/directory | grep -c "foo"
于 2014-01-24T02:35:02.013 回答
4
matches=$(grep -rch "foo" /some/directory | paste -sd+ - | bc)
echo "Total matches: $matches"

paste/bc 部分总结了一个数字列表。请参阅:Bash 命令对一列数字求和

于 2013-04-21T00:44:31.900 回答
2

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

grep -r "foo" /some/directory | wc -l
于 2013-04-21T00:49:29.920 回答