查找-regex比查找速度慢grep的

时间:2012-05-03 12:25:21

标签: regex bash find grep

我有一个使用正则表达式查找文件的脚本。代码如下:

find $dir | grep "$regex"

脚本运行有点太慢,我想优化它。搜索需要一些时间来执行,我希望从中获得更好的性能。我试过这个尝试:

find $dir -regex ".*${regex}.*"

由于没有创建额外的进程来解析正则表达式,因此我希望结果稍快一些。

然而结果是不同的,令我惊讶的是,命令“find | grep”比“find -regex”更快(虽然它需要更多的系统时间,正如人们所期望的那样)

我定时了这个行为:

查找| grep结果

real   0m12.467s
user   0m2.568s
sys    0m7.260s

查找-regex结果

real   0m16.778s
user   0m6.772s
sys    0m6.380s

您是否知道为什么find -regex解决方案更慢?

1 个答案:

答案 0 :(得分:5)

最有可能因为grep及其正则表达式引擎多年来一直被高度优化,因为这是它唯一的目的(“做一件事,做得好”)。我不知道正则表达式引擎find使用了什么,但它显然不像grep那样高度精炼,可能是因为它是一种不太常用的辅助功能。

此外,如果您正在使用此文件列表执行任何操作,那么您应该使用更加空白安全的方法来执行此操作。我不认为grep可以采用以空分隔的输入(虽然它可以输出它),所以你应该使用find [...] -regex [...] -print0,即使它更慢。