【发布时间】:2016-09-25 17:13:08
【问题描述】:
所以最近我正在搜索执行快速搜索的命令行工具,我偶然发现了很多。据我了解,据报道 Ag 比 grep、ack 和 sift 快。 grep 是最慢的。
现在我在一个文件中有 300.000 个字符串,我尝试找出哪些字符串具有特定的子字符串并将它们返回。
time grep 'substring' file.txt
real 0m0.030s
user 0m0.009s
sys 0m0.008s
。
time ag 'substring' file.txt ----> 5 secs
real 0m0.083s
user 0m0.038s
sys 0m0.014s
是我做错了什么,还是没有按照我尝试使用的方式使用 ag?
【问题讨论】:
-
这里的一个关键考虑是这两个命令行调用实际上并没有做同样的事情。
ag调用执行不区分大小写的匹配 和 计算行数;grep两者都不做。 -
@ThomasOrozco 但 ag 被描述为“grep 的更快替代品”.. 如果 ag 的功能与 grep 的不同.. 那么 ag 在什么方面更快?
-
Ag 是为搜索代码库而设计的。它比 grep 更快,因为它更有效地定位应搜索的文件并对其进行聚合处理等。换句话说,grep 和 Ag 是用于不同目的的不同工具。您提供的人为示例只是 grep 闪耀而 Ag 没有的示例。关于这个话题有很多话要说,而且真的没有一个简短的答案。 This blog post(专注于另一个工具:
rg)很好地研究了确定“更快”意味着什么的复杂性。