hypergrep
hypergrep
grep
, ripgrep
, ugrep
, The Silver Searcher
등과 유사합니다. 다음 테스트에서는 hypergrep
의 성능을 비교합니다.
v13.0.0
v2.2.0
v3.11.2
유형 | 값 |
---|---|
프로세서 | 11세대 Intel(R) 코어(TM) i9-11900KF @ 3.50GHz 3.50GHz |
명령어 세트 확장 | 인텔® SSE4.1, 인텔® SSE4.2, 인텔® AVX2, 인텔® AVX-512 |
설치된 RAM | 32.0GB(31.9GB 사용 가능) |
SSD | 아데이터 SX8200PNP |
운영체제 | 우분투 20.04 LTS |
C++ 컴파일러 | g++(우분투 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입니다.
정규식 | 줄 수 | 아그 | 유그레프 | 립그렙 | 하이퍼그렙 |
---|---|---|---|---|---|
함수/구조체/열거형 선언 뒤에 유효한 식별자와 여는 괄호가 옵니다.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 런타임을 바이너리에 정적으로 연결하여 대상 시스템에 대한 종속성을 줄입니다.