2

正規表現を使用してファイルを検索するスクリプトがあります。コードは次のとおりです。

find $dir | grep "$regex"

スクリプトの実行が少し遅すぎるため、最適化したいと考えています。検索の実行には時間がかかるため、パフォーマンスを向上させたいと考えています。私はこの試みを試みました:

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

正規表現を解析するための余分なプロセスが作成されないため、結果がわずかに高速になることを期待していました。

しかし、結果は異なり、驚いたことに、コマンド「find | grep」は「find -regex」よりも高速です(ただし、予想どおり、システム時間はかかります)

私はこの動作の時間を測定しました:

検索 | grep の結果

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

検索 -正規表現の結果

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

find -regex ソリューションが遅い理由がわかりましたか?

4

1 に答える 1

5

おそらくgrep、正規表現エンジンが長年にわたって高度に最適化されてきたためです。正規表現エンジンが何を使用しているかはわかりませんが、使用頻度の低い二次機能であるため、 'sfindほど高度に洗練されていないことは明らかです。grep

また、このファイル リストを使用して何かを行う場合は、空白をより安全に使用する方法を使用する必要があります。grepnull 区切りの入力は (出力はできますが) 受け取れないと思いますので、find [...] -regex [...] -print0遅くても使用する必要があります。

于 2012-05-03T15:41:42.310 に答える