Huy*_*ens 2 regex bash grep find
我有一个脚本,使用正则表达式查找文件.代码如下:
find $dir | grep "$regex"
Run Code Online (Sandbox Code Playgroud)
脚本运行有点太慢,我想优化它.搜索需要一些时间来执行,我希望从中获得更好的性能.我试过这个尝试:
find $dir -regex ".*${regex}.*"
Run Code Online (Sandbox Code Playgroud)
由于没有创建额外的进程来解析正则表达式,因此我期待结果稍快一些.
然而结果是不同的,令我惊讶的是,命令"find | grep"比"find -regex"更快(虽然它需要更多的系统时间,正如人们所期望的那样)
我把这个行为计时了:
找到| grep结果
real 0m12.467s
user 0m2.568s
sys 0m7.260s
Run Code Online (Sandbox Code Playgroud)
找到-regex结果
real 0m16.778s
user 0m6.772s
sys 0m6.380s
Run Code Online (Sandbox Code Playgroud)
你知道为什么find -regex解决方案更慢吗?
最有可能因为grep它的正则表达式引擎已经多年来高度优化,因为这是它的唯一目的("做一件事,做得好").我不知道正则表达式引擎find使用的是什么,但它显然没有那么精致grep,可能是因为它是一种不太常用的辅助功能.
此外,如果您正在使用此文件列表执行任何操作,那么您应该使用更加空白安全的方法来执行此操作.我不认为grep可以采用空分隔输入(虽然它可以输出它),所以你应该使用它,find [...] -regex [...] -print0即使它更慢.