我发现grep对处理的行数有一些内部限制。
有没有办法消除此限制?
$ cat debug-2020-09-14.log | wc -l
5255625
$ cat debug-2020-09-14.log | grep -v "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | wc -l
3239948
$ cat debug-2020-09-14.log | grep "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | wc -l
0
我怀疑您的日志文件中有二进制数据。一旦grep
匹配其中包含二进制数据的行,就grep
打印Binary file (standard input) matches
(输出到stdout,而不是stderr!)并退出。二进制部分之后的所有匹配项都将被忽略。
为了证实这一理论运行
grep . debug-2020-09-14.log | grep -x 'Binary file .* matches'
如果确实是问题所在,则可以使用grep
的-a
选项进行修复。在这里,我们还更换cat
和wc -l
通过grep
的能力。
grep -ac aaaa debug-2020-09-14.log
来自man grep
:
-a
,--text
像对待文本一样处理二进制文件;这等效于该--binary-files=text
选项。
--binary-files=TYPE
如果文件的数据或元数据表明该文件包含二进制数据,则假定该文件的类型为TYPE
。在发现空输入二进制数据后,grep抑制输出。当某些输出被抑制时,grep在任何输出之后都带有一条单行消息,表明二进制文件匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句