【问题标题】:Recursive Grep to show only total matchin count递归 Grep 仅显示总匹配数
【发布时间】:2013-04-14 03:45:29
【问题描述】:

我正在尝试进行递归 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

我玩过一些其他的例子,例如in this thread,虽然我似乎无法做应该如此简单的事情。

【问题讨论】:

    标签: bash shell grep


    【解决方案1】:
    grep -ro "foo" /some/directory | wc -l | xargs echo "Total matches :"
    

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

    【讨论】:

    • 谢谢,有用的命令。不过我不确定哪个是准确的,因为在你的例子中我得到了 447 场比赛,而 Johns 我得到了 392 场比赛。我想我得再多玩一点才能知道。
    • 这个命令对我来说非常有效。我更新了我的示例,添加了一个字符串,在命令结束时为您提供结果。
    • 一行中的多个匹配项分别产生一个单独的输出行,带有-o
    【解决方案2】:

    只需管道到 grep。

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

    【讨论】:

      【解决方案3】:
      matches=$(grep -rch "foo" /some/directory | paste -sd+ - | bc)
      echo "Total matches: $matches"
      

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

      【讨论】:

      • 哇。很棒的命令 :) - 很难添加“Total matches:”?
      • 我最终选择了 Halims,因为它将所有内容组合在一行中。不过,我肯定会把它放在手边,因为它可能非常有用。又来了。
      【解决方案4】:

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

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

      【讨论】:

      • 这将只打印发现一个或多个出现的每一行。这不会返回字符串或模式的所有现有出现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2011-04-23
      • 1970-01-01
      相关资源
      最近更新 更多