hypergrep
hypergrep
grep
、 ripgrep
、 ugrep
、 The Silver Searcher
等。以下測試比較了hypergrep
的性能:
v13.0.0
v2.2.0
v3.11.2
類型 | 價值 |
---|---|
處理器 | 第 11 代英特爾(R) 酷睿(TM) i9-11900KF @ 3.50GHz 3.50 GHz |
指令集擴展 | 英特爾® SSE4.1、英特爾® SSE4.2、英特爾® AVX2、英特爾® AVX-512 |
已安裝內存 | 32.0 GB(31.9 GB 可用) |
固態硬碟 | 威剛SX8200PNP |
作業系統 | Ubuntu 20.04 LTS |
C++編譯器 | g++ (Ubuntu 11.1.0-1ubuntu1-20.04) 11.1.0 |
vcpkg 提交:662dbb5
圖書館 | 版本 |
---|---|
arg解析 | 2.9 |
並發隊列 | 1.0.3 |
FMMT | 10.0.0 |
超掃描 | 5.4.2 |
libgit2 | 1.6.4 |
OpenSubtitles.raw.en.txt
以下搜尋是對記憶體中快取的單一大檔案(~13GB, OpenSubtitles.raw.en.gz
)執行的。
正規表示式 | 行數 | 股份公司 | 烏格勒普 | ripgrep | 超grep |
---|---|---|---|---|---|
計算福爾摩斯做某件事的次數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。
正規表示式 | 行數 | 股份公司 | 烏格勒普 | ripgrep | 超grep |
---|---|---|---|---|---|
簡單文字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 |
四個文字的交替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。
正規表示式 | 行數 | 股份公司 | 烏格勒普 | ripgrep | 超grep |
---|---|---|---|---|---|
函數/結構體/枚舉宣告後面跟著有效標識符和左括號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
目錄上執行的。
正規表示式 | 行數 | 股份公司 | 烏格勒普 | ripgrep | 超grep |
---|---|---|---|---|---|
任何 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 |
計算十六進制值的數量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 運行時靜態連結到二進位檔案中,從而減少對目標系統的依賴。