ag(the_silver_searcher)没有搜索整个文件 - 它是否有隐含的最大输入大小?

ag(the_silver_searcher)没有搜索整个文件 - 它是否有隐含的最大输入大小?

我有一个非常大的纯文本文件(大小达几 GB),我需要在其中搜索某些字符串。使用 时grep,我得到了超过 11,000 个字符串匹配项,但使用 时,ag我得到了大约 1,500 个。这两个命令的输出在 停止之前是相同的ag

我知道定义最大匹配数的-m选项ag,但默认为 10,000,所以不是问题。

为了说明这一点,下面是正在发生的情况的一个例子:

$ grep -i 'string' hugefile.txt | wc -l
    11000
$ ag -i 'string' hugefile.txt | wc -l
    1500

两个命令的输出结果完全相同,匹配次数也相同:

$ grep -m 1500 -i 'string' hugefile.txt > grep_output.txt
$ ag --no-numbers -i 'string' hugefile.txt > ag_output.txt

$ diff grep_output.txt ag_output.txt

(files identical)

是否ag有隐含的最大输入大小,如果是,是否可以改变它?

答案1

您是否有可能每行有多个 (平均 6 到 7 个) 匹配项?

如果是这样,上述计数方法是错误的:它只计算匹配的行,而不计算匹配的行。因此,如果你在 1500 行匹配之后已经达到 10000 个匹配的限制,那么你将得到上述结果,并且它将是正确的

grep此外,和ag选项的语义-m似乎不同:

  • 这是grep读取的最大行数:在 NUM 行匹配之后停止读取文件。
  • ag它的最大匹配次数是:跳过 NUM 个匹配项后的文件的剩余部分。

-m所以我怀疑你已经达到了匹配的默认最大限制,并且需要增加传递给选项的值ag

相关内容