hypergrep
hypergrep
grep
、 ripgrep
、 ugrep
、 The Silver Searcher
などに似ています。次のテストでは、 hypergrep
のパフォーマンスを比較します。
v13.0.0
v2.2.0
v3.11.2
タイプ | 価値 |
---|---|
プロセッサー | 第 11 世代インテル(R) Core(TM) i9-11900KF @ 3.50GHz 3.50 GHz |
命令セット拡張 | インテル® SSE4.1、インテル® SSE4.2、インテル® AVX2、インテル® AVX-512 |
搭載RAM | 32.0GB(31.9GB使用可能) |
SSD | ADATA SX8200PNP |
OS | Ubuntu 20.04 LTS |
C++ コンパイラ | g++ (Ubuntu 11.1.0-1ubuntu1-20.04) 11.1.0 |
vcpkg コミット: 662dbb5
図書館 | バージョン |
---|---|
引数解析 | 2.9 |
同時実行キュー | 1.0.3 |
fmt | 10.0.0 |
ハイパースキャン | 5.4.2 |
libgit2 | 1.6.4 |
OpenSubtitles.raw.en.txt
次の検索は、メモリにキャッシュされた単一の大きなファイル (約 13GB、 OpenSubtitles.raw.en.gz
) に対して実行されます。
正規表現 | 行数 | ああ | ウグレップ | リップレップ | ハイパーグレップ |
---|---|---|---|---|---|
ホームズが何かをした回数を数えるhgrep -c 'Holmes did w' | 27 | 該当なし | 1.820 | 1.022 | 0.696 |
正規表現サフィックス付きリテラルhgrep -nw 'Sherlock [AZ]w+' en.txt | 7882 | 該当なし | 1.812 | 1.509 | 0.803 |
単純なリテラルhgrep -nw 'Sherlock Holmes' en.txt | 7653 | 15.764 | 1.888 | 1.524 | 0.658 |
単純なリテラル (大文字と小文字を区別しない)hgrep -inw 'Sherlock Holmes' en.txt | 7871 | 15.599 | 6.945 | 2.162 | 0.650 |
リテラルの代替hgrep -n 'Sherlock Holmes|John Watson|Irene Adler|Inspector Lestrade|Professor Moriarty' en.txt | 10078 | 該当なし | 6.886 | 1.836 | 0.689 |
リテラルの代替 (大文字と小文字は区別されません)hgrep -in 'Sherlock Holmes|John Watson|Irene Adler|Inspector Lestrade|Professor Moriarty' en.txt | 10333 | 該当なし | 7.029 | 3.940 | 0.770 |
リテラル文字列を囲む単語hgrep -n 'w+[x20]+Holmes[x20]+w+' en.txt | 5020 | 該当なし | 6分11秒 | 1.523 | 0.638 |
torvalds/linux
次の検索は、Linux カーネル ソース ツリー全体に対して実行されます ( make defconfig && make -j8
の実行後)。使用されるコミットは f1fcb です。
正規表現 | 行数 | ああ | ウグレップ | リップレップ | ハイパーグレップ |
---|---|---|---|---|---|
単純なリテラルhgrep -nw 'PM_RESUME' | 9 | 2.807 | 0.316 | 0.147 | 0.140 |
単純なリテラル (大文字と小文字を区別しない)hgrep -niw 'PM_RESUME' | 39 | 2.904 | 0.435 | 0.149 | 0.141 |
リテラル接尾辞を含む正規表現hgrep -nw '[AZ]+_SUSPEND' | 536 | 3.080 | 1.452 | 0.148 | 0.143 |
4 つのリテラルの交互hgrep -nw '(ERR_SYS|PME_TURN_OFF|LINK_REQ_RST|CFG_BME_EVT)' | 16 | 3.085 | 0.410 | 0.153 | 0.146 |
ユニコードギリシャ語hgrep -n 'p{Greek}' | 111 | 3.762 | 0.484 | 0.345 | 0.146 |
apple/swift
次の検索は、Apple Swift ソース ツリー全体に対して実行されます。使用されるコミットは 3865b です。
正規表現 | 行数 | ああ | ウグレップ | リップレップ | ハイパーグレップ |
---|---|---|---|---|---|
Function/Struct/Enum 宣言の後に有効な識別子と開き括弧が続くhgrep -n '(func|struct|enum)s+[A-Za-z_][A-Za-z0-9_]*s*(' | 59026 | 1.148 | 0.954 | 0.154 | 0.090 |
英字で始まり、その後に少なくとも 2 桁の数字が続く単語hgrep -nw '[A-Za-z]+d{2,}' | 127858 | 1.169 | 1.238 | 0.156 | 0.095 |
大文字で始まり、その後に英数字および/またはアンダースコアが続くものhgrep -nw '[AZ][a-zA-Z0-9_]*' | 2012372 | 3.131 | 2.598 | 0.550 | 0.482 |
Guard let ステートメントの後に有効な識別子が続くhgrep -n 'guards+lets+[a-zA-Z_][a-zA-Z0-9_]*s*=s*w+' | 839 | 0.828 | 0.174 | 0.054 | 0.047 |
/usr
次の検索は/usr
ディレクトリに対して実行されます。
正規表現 | 行数 | ああ | ウグレップ | リップレップ | ハイパーグレップ |
---|---|---|---|---|---|
任意の HTTPS または FTP URLhgrep "(https?|ftp)://[^s/$.?#].[^s]*" | 13682 | 4.597 | 2.894 | 0.305 | 0.171 |
任意の IPv4 IP アドレスhgrep -w "(?:d{1,3}.){3}d{1,3}" | 12643 | 4.727 | 2.340 | 0.324 | 0.166 |
任意の電子メールアドレスhgrep -w "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}" | 47509 | 5.477 | 37.209 | 0.494 | 0.220 |
任意の有効な日付MM/DD/YYYY hgrep "(0[1-9]|1[0-2])/(0[1-9]|[12]d|3[01])/(19|20)d{2}" | 116 | 4.239 | 1.827 | 0.251 | 0.163 |
HEX 値の数を数えるhgrep -cw "(?:0x)?[0-9A-Fa-f]+" | 68042 | 5.765 | 28.691 | 1.439 | 0.611 |
任意の C/C++ でリテラルを検索するhgrep --filter ".(c|cpp|h|hpp)$" test | 7355 | 該当なし | 0.505 | 0.118 | 0.079 |
vcpkg
を使用して依存関係をインストールするgit clone https://github.com/microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install concurrentqueue fmt argparse libgit2 hyperscan
cmake
とvcpkg
使用してhypergrep
ビルドする git clone https://github.com/p-ranav/hypergrep
cd hypergrep
cmake
が3.19
より古い場合 mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=<path_to_vcpkg>/scripts/buildsystems/vcpkg.cmake ..
make
cmake
が3.19
より新しい場合release
プリセットを使用します。
export VCPKG_ROOT=<path_to_vcpkg>
cmake -B build -S . --preset release
cmake --build build
x86_64 移植性用のバイナリをビルドするには、 -DBUILD_PORTABLE=on
オプションを指定して cmake を呼び出します。これにより、 -march=x86-64 -mtune=generic
および-static-libgcc -static-libstdc++
が使用され、C++ 標準ライブラリと GCC ランタイムがバイナリに静的にリンクされ、ターゲット システムへの依存関係が軽減されます。