我有一个非常大的纯文本文件(大小达几 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
。