grep
, ripgrep
, ugrep
, The Silver Searcher
, etc. Las siguientes pruebas comparan el rendimiento de hypergrep
con:
v13.0.0
v2.2.0
v3.11.2
Tipo | Valor |
---|---|
Procesador | Intel(R) Core(TM) i9-11900KF de 11.ª generación a 3,50 GHz 3,50 GHz |
Extensiones del conjunto de instrucciones | Intel® SSE4.1, Intel® SSE4.2, Intel® AVX2, Intel® AVX-512 |
RAM instalada | 32,0 GB (31,9 GB utilizables) |
SSD | ADATA SX8200PNP |
SO | Ubuntu 20.04 LTS |
Compilador C++ | g++ (Ubuntu 11.1.0-1ubuntu1-20.04) 11.1.0 |
confirmación de vcpkg: 662dbb5
Biblioteca | Versión |
---|---|
analizar argumentos | 2.9 |
cola concurrente | 1.0.3 |
fmt | 10.0.0 |
hiperexploración | 5.4.2 |
libgit2 | 1.6.4 |
OpenSubtitles.raw.en.txt
Las siguientes búsquedas se realizan en un único archivo grande almacenado en caché en la memoria (~13 GB, OpenSubtitles.raw.en.gz
).
expresión regular | Conteo de líneas | ag | ugrep | ripgrep | hipergrep |
---|---|---|---|---|---|
Cuente el número de veces que Holmes hizo algo.hgrep -c 'Holmes did w' | 27 | n / A | 1.820 | 1.022 | 0,696 |
Literal con sufijo Regexhgrep -nw 'Sherlock [AZ]w+' en.txt | 7882 | n / A | 1.812 | 1.509 | 0.803 |
literales sencilloshgrep -nw 'Sherlock Holmes' en.txt | 7653 | 15.764 | 1.888 | 1.524 | 0,658 |
Literal simple (no distingue entre mayúsculas y minúsculas)hgrep -inw 'Sherlock Holmes' en.txt | 7871 | 15.599 | 6.945 | 2.162 | 0.650 |
Alternancia de literaleshgrep -n 'Sherlock Holmes|John Watson|Irene Adler|Inspector Lestrade|Professor Moriarty' en.txt | 10078 | n / A | 6.886 | 1.836 | 0,689 |
Alternancia de literales (no distingue entre mayúsculas y minúsculas)hgrep -in 'Sherlock Holmes|John Watson|Irene Adler|Inspector Lestrade|Professor Moriarty' en.txt | 10333 | n / A | 7.029 | 3.940 | 0.770 |
Palabras que rodean una cadena literalhgrep -n 'w+[x20]+Holmes[x20]+w+' en.txt | 5020 | n / A | 6m 11s | 1.523 | 0,638 |
torvalds/linux
Las siguientes búsquedas se realizan en todo el árbol de fuentes del kernel de Linux (después de ejecutar make defconfig && make -j8
). El compromiso utilizado es f1fcb.
expresión regular | Conteo de líneas | ag | ugrep | ripgrep | hipergrep |
---|---|---|---|---|---|
literales sencilloshgrep -nw 'PM_RESUME' | 9 | 2.807 | 0.316 | 0,147 | 0.140 |
Literal simple (no distingue entre mayúsculas y minúsculas)hgrep -niw 'PM_RESUME' | 39 | 2.904 | 0.435 | 0,149 | 0,141 |
Regex con sufijo literalhgrep -nw '[AZ]+_SUSPEND' | 536 | 3.080 | 1.452 | 0.148 | 0.143 |
Alternancia de cuatro literaleshgrep -nw '(ERR_SYS|PME_TURN_OFF|LINK_REQ_RST|CFG_BME_EVT)' | 16 | 3.085 | 0.410 | 0.153 | 0.146 |
Unicode griegohgrep -n 'p{Greek}' | 111 | 3.762 | 0,484 | 0.345 | 0.146 |
apple/swift
Las siguientes búsquedas se realizan en todo el árbol fuente de Apple Swift. El compromiso utilizado es 3865b.
expresión regular | Conteo de líneas | ag | ugrep | ripgrep | hipergrep |
---|---|---|---|---|---|
Declaración de función/estructura/enum seguida de un identificador válido y un paréntesis de aperturahgrep -n '(func|struct|enum)s+[A-Za-z_][A-Za-z0-9_]*s*(' | 59026 | 1.148 | 0.954 | 0,154 | 0.090 |
Palabras que comienzan con caracteres alfabéticos seguidos de al menos 2 dígitoshgrep -nw '[A-Za-z]+d{2,}' | 127858 | 1.169 | 1.238 | 0,156 | 0.095 |
Trabaja comenzando con letras mayúsculas, seguidas de caracteres alfanuméricos y/o guiones bajos.hgrep -nw '[AZ][a-zA-Z0-9_]*' | 2012372 | 3.131 | 2.598 | 0.550 | 0,482 |
Declaración Guard Let seguida de un identificador válidohgrep -n 'guards+lets+[a-zA-Z_][a-zA-Z0-9_]*s*=s*w+' | 839 | 0,828 | 0,174 | 0.054 | 0,047 |
/usr
Las siguientes búsquedas se realizan en el directorio /usr
.
expresión regular | Conteo de líneas | ag | ugrep | ripgrep | hipergrep |
---|---|---|---|---|---|
Cualquier URL HTTPS o FTPhgrep "(https?|ftp)://[^s/$.?#].[^s]*" | 13682 | 4.597 | 2.894 | 0.305 | 0.171 |
Cualquier dirección IP IPv4hgrep -w "(?:d{1,3}.){3}d{1,3}" | 12643 | 4.727 | 2.340 | 0.324 | 0,166 |
Cualquier dirección de correo electrónicohgrep -w "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}" | 47509 | 5.477 | 37.209 | 0,494 | 0.220 |
Cualquier fecha válida 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 |
Cuente el número de valores HEXhgrep -cw "(?:0x)?[0-9A-Fa-f]+" | 68042 | 5.765 | 28.691 | 1.439 | 0.611 |
Busque un literal en cualquier C/C++hgrep --filter ".(c|cpp|h|hpp)$" test | 7355 | n / A | 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
hypergrep
usando cmake
y vcpkg
git clone https://github.com/p-ranav/hypergrep
cd hypergrep
cmake
es anterior a 3.19
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=<path_to_vcpkg>/scripts/buildsystems/vcpkg.cmake ..
make
cmake
es más reciente que 3.19
Utilice el ajuste preestablecido release
:
export VCPKG_ROOT=<path_to_vcpkg>
cmake -B build -S . --preset release
cmake --build build
Para compilar el binario para la portabilidad x86_64, invoque cmake con la opción -DBUILD_PORTABLE=on
. Esto utilizará -march=x86-64 -mtune=generic
y -static-libgcc -static-libstdc++
y vinculará la biblioteca estándar de C++ y el tiempo de ejecución de GCC estáticamente en el binario, lo que reducirá las dependencias en el sistema de destino.