为什么将 1250 个字符串与 90k 模式匹配这么慢?

ska*_*rus 12 linux grep

我的字符串是文件路径,如s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; 我的模式很简单,都喜欢n7ce49B_.+

我跑GNU grep 2.6.3的Debian 6.0.10戴尔DL360G7服务器(我说出来,只是给这台机器性能比较的意义上)与15K硬盘,而这个命令:time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file只是无法完成-服务器交换太差。使用 20k 图案需要 3 个多小时。

这对我来说似乎不合理。

每个评论请求,有文件:文件路径 20k 模式

还可以使用以下方法测试和调整输入行和模式的数量:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 15

您在旧版本的 GNU grep ( bug#22357 ) 中遇到了性能问题,此提交已在 2.28 中发布,尽管该更改引入了一些回归,因此您希望获得 GNU grep3.0 或更新版本。