我正在尝试进行递归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,虽然我似乎无法做到应该这么简单的事情。
答案 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