代码之家  ›  专栏  ›  技术社区  ›  SnoringFrog Kent

计数目录中与ag匹配的总数

  •  20
  • SnoringFrog Kent  · 技术社区  · 9 年前

    我试图在一个大型项目中找到给定字符串的匹配数。目前,要使用 ag 我正在使用以下命令:

    $ echo 0$(ag -c searchterm | sed -e "s/^.*:/+/") | bc
    

    这显然有点冗长而且不是很直观。有没有更好的方法可以从 ? 我翻遍了文档,找不到任何有用的东西。

    编辑:感谢 recent commit ,文件名可以用 而不是 sed ,因此这也有效:

    $ echo `ag test -c --nofilename | sed "s/$/+/"`0 | bc
    

    注:我意识到我可以用 ack -hcl searchterm (嗯,差不多。在我的具体情况下,我需要一个 --ignore-dir building 但由于这已经是一个大型项目(而且将大幅增长) 使其更可取( ack 我的搜索需要大约3秒 几乎是瞬间的结果),所以我想坚持下去。

    4 回复  |  直到 9 年前
        1
  •  21
  •   gregory    9 年前

    我使用ag本身来匹配统计数据。例如。:

     >$ ag --stats --java -c 'searchstring' | ag '.*matches'
     >$ 22 matches 
     >$ 6 files contained matches
    

    使用前瞻性筛选以仅打印匹配数:

     >$ ag --stats --java -c 'searchstring' | ag -o '^[0-9]+(?=\smatches)'
     >$ 22   
    
        2
  •  5
  •   Mark    5 年前

    ag -o --nofilename --nobreak 'searchstring' | wc -l

    • -o 单独打印每个匹配项
    • --nofilename 从输出中删除文件名
    • --nobreak 删除不同文件中匹配项之间的换行符
        3
  •  3
  •   SnoringFrog Kent    9 年前

    仍然没有很好的解决方案,但下面是我为其他找到这个的人想出的解决方案:

    如果您没有搜索大量文件,只需使用 ack -hcl searchterm 否则

    我通过利用 --stats 选项,它会在搜索结果中附加以下内容:

    714 matches
    130 files contained matches
    300 files searched
    123968435 bytes searched
    0.126203 seconds 
    

    对于手动使用,这已经足够好了(尽管它仍然充斥着所有匹配项),但对于脚本,我仍然只需要数字。因此,为了达到这个目的,我已经从问题中的命令转到了以下内容:

    $ ag --stats searchterm | tail -n5 | head -n1 | cut -d" " -f1
    

    或者更简洁但不那么令人难忘

    $ ag --stats searchterm | tac | awk 'NR==5 {print $1}'
    

    (替换 tac 具有 tail -r 如果你没有 战术指挥中心 )

    为了节省更多的输入,我对命令的后半部分进行了别名,这样我就可以通过管道 ag --stats 到我的化名,得到我想要的。所以,随着 alias agmatches='tac | awk "NR==5 {print \$1}' 我可以通过跑步来获得火柴 ag --stats searchterm | agmatches .

    如果这些东西内置在ag中以帮助实现这一点,那会更好。我提交了一个拉取请求 --stats-only 输出选项将有所帮助, 但这还没有什么结果 如果您直接从repo构建,这是可用的,但还没有稳定的版本,因此这应该会加快过程,从而获得大量结果。

        4
  •  3
  •   LumberManFromOregon    3 年前

    我喜欢上面gregory的回答,但要补充更多内容:

    ag--stats--java-c'搜索字符串'|ag'.*matches'

    • 这个 --java 标志表示 ag 将仅搜索具有 .java (和 .properties ) extensions 。因此,如果您在python项目中搜索 .py 文件,您可以使用 --python 旗帜运行 ag --list-file-types 命令,用于搜索所有可用的文件类型。
    • 这个 -c --count 标志提供 number of matches .