我有一个使用正则表达式查找文件的脚本。代码如下:
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 解决方案速度较慢吗?
最佳答案
很可能是因为 grep
及其正则表达式引擎多年来经过了高度优化,因为这是它唯一的目的(“做一件事并把它做好”)。我不知道 find
使用什么正则表达式引擎,但它显然不如 grep
那样高度精致,可能是因为它是一个不太常用的次要功能。
此外,如果您要对此文件列表执行任何操作,则应该使用更安全的空格方式来执行此操作。我认为 grep
不能接受空分隔输入(尽管它可以输出它),所以你应该使用 find [...] -regex [...] -print0
尽管速度较慢。
关于regex - find -regex 比 find | 慢grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431331/