Home

Awesome

performance reports

Updated benchmarks are automatically generated and published when a new version of ugrep is released. Last update Thu Oct 24 16:14:32 EDT 2024

performance report x64

performance report arm64

benchmark setup

Intel x64 machine:

./install.sh # expand source code repo in corpi dir and create archives to search
./bench.sh > report_x64.md
./collect.awk < report_x64.md

ARM64 machine:

./install.sh # expand source code repo in corpi dir and create archives to search
./bench.sh > report_arm64.md
./collect.awk < report_arm64.md

the install.sh script requires the following compression utilities:

important notes on benchmarking methodology

WARNING performance results are meaningless when the host machine executes other tasks that load the CPU; quit all running applications first, disconnect from the network if possible to halt background process networking activity, and check for running background processes (with e.g. top) before running ./bench.sh

important notes on grep tool differences that impact the results

performance report x64

found ugrep 1545712 byte executable located at /usr/local/bin/ugrep

ugrep 7.0.0 x86_64-apple-darwin21.6.0 +avx2; -P:pcre2jit; -z:zlib,bzip2,lzma,lz4,zstd,brotli,7z,tar/pax/cpio/zip
License: BSD-3-Clause; ugrep user manual: <https://ugrep.com>
Written by Robert van Engelen and others: <https://github.com/Genivia/ugrep>
Ugrep utilizes the RE/flex regex library: <https://github.com/Genivia/RE-flex>

found rg 6748656 byte executable located at /usr/local/bin/rg

ripgrep 14.1.0

features:-simd-accel,+pcre2
simd(compile):+SSE2,+SSSE3,-AVX2
simd(runtime):+SSE2,+SSSE3,+AVX2

PCRE2 10.42 is available (JIT is available)

found ag 84764 byte executable located at /usr/local/bin/ag

ag version 2.2.0

Features:
  +jit +lzma +zlib

found ggrep 263184 byte executable located at /usr/local/bin/ggrep

ggrep (GNU grep) 3.11
Packaged by Homebrew
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others; see
<https://git.savannah.gnu.org/cgit/grep.git/tree/AUTHORS>.

grep -P uses PCRE2 10.44 2024-06-07

results for large text file search

grepping rol elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.020.020.020.020.030.020.020.000.01
rg0.030.030.030.030.030.030.020.030.000.01
ag0.680.650.400.340.360.350.100.100.100.10
ggrep0.110.130.140.150.520.520.100.510.000.08

grepping the elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.060.080.140.080.100.200.030.040.000.00
rg0.070.100.170.110.140.330.040.070.000.00
ag3.713.721.163.613.621.060.140.140.140.14
ggrep0.130.170.700.350.863.810.090.760.000.00

grepping cycles|semigroups elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.030.030.030.030.030.030.030.000.00
rg0.030.040.030.030.060.060.040.050.000.00
ag0.420.410.400.410.420.420.160.160.160.17
ggrep0.210.220.220.340.300.300.210.290.000.00

grepping ro[a-z]*ds elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.050.050.050.060.060.060.050.060.010.01
rg0.040.040.040.070.060.070.040.070.000.00
ag0.440.440.390.410.400.390.140.140.140.14
ggrep0.370.370.380.400.840.840.360.810.000.00

grepping r[a-z]*st elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.080.090.100.100.110.110.060.100.000.00
rg0.160.160.210.170.200.190.130.180.000.00
ag1.831.830.680.480.480.410.210.150.200.15
ggrep0.860.911.281.123.153.220.833.150.000.00

grepping [A-Z][a-z]+ny elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.030.030.040.040.040.030.030.000.00
rg0.030.030.040.040.120.210.020.110.000.00
ag0.740.740.540.731.761.200.230.840.230.84
ggrep0.260.280.330.281.693.250.251.600.000.00

grepping [A-Z][a-z]{11}ny elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.030.030.030.030.030.020.030.010.01
rg0.020.020.020.030.140.150.020.140.000.02
ag0.340.350.350.230.410.410.140.170.140.17
ggrep0.310.320.320.332.442.460.312.450.040.29

grepping \w+ny elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.050.050.050.050.060.060.040.040.010.01
rg0.040.050.050.040.130.240.030.100.010.00
ag1.621.640.861.561.580.860.460.480.460.48
ggrep1.111.133.181.241.543.641.041.420.000.00

grepping ab(cd?)? elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.040.040.040.030.030.030.020.030.000.00
rg0.050.070.070.040.120.120.030.110.000.00
ag1.891.880.640.430.430.420.150.170.150.17
ggrep0.110.130.320.341.621.630.091.610.000.00

grepping x*y*z* elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.100.130.220.120.130.130.050.120.000.01
rg0.150.2510.250.260.281.760.090.100.000.00
ag4.304.324.422.302.282.274.082.024.072.05
ggrep0.200.3416.931.632.9637.360.072.480.000.00

grepping (19|20)[0-9]{2}/(0[1-9]|1[012])|(0[1-9]|1[012])/(19|20)[0-9]{2} elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.030.020.020.020.030.020.020.010.01
rg0.040.040.050.080.080.080.050.080.000.00
ag0.400.400.390.400.400.380.140.140.140.14
ggrep0.050.070.070.090.090.110.050.080.000.00

grepping (https?://|www\.)[-a-zA-Z0-9@:%._+~#=]{1,253}\.[-a-zA-Z0-9]{2,}\.[][a-zA-Z0-9()@:%_+.~#?&/=\-]+ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.060.070.060.070.070.070.050.060.020.02
rgfailfailfailfailfailfailfailfailfailfail
ag0.810.790.550.800.800.550.160.160.150.16
ggrep5.705.6911.455.815.9812.025.605.910.010.01

grepping [a-z]+-[a-z]+ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.050.050.050.050.060.070.030.040.000.00
rg0.060.080.090.090.110.120.050.080.000.00
ag2.122.110.932.122.140.950.380.410.380.41
ggrep2.732.715.223.062.946.522.962.820.000.00

grepping '' elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.090.160.160.160.150.160.040.040.000.00
rg0.150.2710.190.260.271.710.080.100.000.00
agfailfailfailfailfailfailfailfail0.061.20
ggrep0.200.3617.221.542.6934.700.072.290.000.00

grepping ^$ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.040.060.060.060.060.060.030.040.000.00
rg0.060.090.100.770.770.790.050.730.000.00
ag0.410.420.37failfailfail0.11fail0.11fail
ggrep0.110.150.142.854.654.640.084.570.000.00

results for large text file search for words from files

grepping -fwords/1.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.050.060.050.060.110.240.030.060.000.00
rg0.050.060.070.070.180.410.030.100.000.00
ggrep0.130.160.210.170.924.090.100.790.000.00

grepping -fwords/2.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.120.120.120.120.140.140.120.140.000.00
rg0.150.150.150.1611.5911.650.1411.780.010.01
ggrep0.950.970.970.970.420.470.920.400.000.00

grepping -fwords/3.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.230.250.250.240.490.500.210.480.000.01
rg0.210.220.230.2219.6519.790.1819.300.000.03
ggrep1.381.401.621.489.539.751.309.420.000.02

grepping -fwords/4.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.190.190.180.190.400.400.180.360.010.02
rg0.280.280.284.03368.43373.730.26367.940.010.10
ggrepfailfailfailfailfailfailfailfailfailfail

results for large text file search with formatted output

grepping Sherlock|Holmes elapsed real time (s)

search--json--csv--xml--hex
ugrep0.020.020.020.02
rg0.04failfailfail
ag0.40fail0.39fail

results for large text file search with replaced output

grepping flop elapsed real time (s)

search--replace=flip
ugrep0.02
rg0.02

results for large text file search with context

grepping ^$ elapsed real time (s)

search-nA9-nB9-nC9-winA999-winB999-winC999
ugrep0.180.180.190.200.240.21
rg0.180.190.201.051.050.99
ag0.550.760.78failfailfail
ggrep0.310.340.345.135.365.33

grepping begin|end elapsed real time (s)

search-nA9-nB9-nC9-winA999-winB999-winC999
ugrep0.110.090.150.180.220.19
rg0.100.100.110.230.250.24
ag1.521.711.741.021.241.20
ggrep0.340.330.381.261.321.28

results for large long lines JSON file search

grepping abc[a-z0-9]+ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.040.040.030.040.030.030.020.020.000.01
rg0.040.040.020.030.030.030.020.030.000.00
ag2.712.720.710.560.570.370.100.110.100.11
ggrep0.190.190.360.352.112.360.172.180.000.07

results for OpenSSL source code repo directory search

grepping FIXME|TODO elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.030.030.030.030.040.03
rg0.030.030.030.030.030.03
ag0.060.050.050.050.050.05
ggrep0.140.160.230.230.220.21

grepping char|int|long|size_t|void elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.050.050.050.050.050.04
rg0.060.060.060.070.060.05
ag0.510.350.350.230.080.08
ggrep0.240.320.520.680.440.19

grepping ssl-?3(\.[0-9]+)? elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.030.030.030.030.040.03
rg0.030.030.040.030.030.03
ag0.060.050.050.050.050.05
ggrep0.130.130.150.150.130.13

results for Swift source code repo directory search

grepping _(RUN|LIB|NAM)[A-Z_]+ elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.250.250.250.260.270.26
rg0.260.260.260.270.260.26
ag0.440.410.430.420.390.40
ggrep0.770.910.991.000.950.92

grepping String|Int|Double|Array|Dictionary elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.290.270.300.300.300.26
rg0.330.320.340.350.330.31
ag1.410.811.070.850.500.46
ggrep1.001.192.682.992.491.08

grepping (class|struct)\sS[a-z]+T elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.250.250.260.260.270.25
rg0.260.260.270.270.270.26
ag0.510.410.430.440.430.40
ggrep0.941.021.321.321.301.21

grepping for\s[a-z]+\sin elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.260.250.260.260.280.25
rg0.300.260.260.270.260.26
ag0.510.450.460.440.400.41
ggrep0.880.871.221.171.131.03

results for bz2 compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep3.223.233.223.270.470.46
rg3.343.343.353.340.460.46
agfailfailfailfailfailfail

results for gz compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.510.510.510.520.080.08
rg0.410.410.400.410.060.06
agfailfailfailfailfailfail

results for lz4 compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.090.090.090.090.020.02
rg0.110.130.110.130.020.03
agfailfailfailfailfailfail

results for xz compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep1.441.411.431.440.210.21
rg1.481.461.471.480.210.22
agfailfailfailfailfailfail

results for zstd compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.180.180.180.180.030.03
rg0.160.160.160.16failfail
agfailfailfailfailfailfail

results for zip archived repo search

grepping FIXME|TODO elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.320.310.320.320.320.32
rgfailfailfailfailfailfail
agfailfailfailfailfailfail

results for tar archived repo search

grepping FIXME|TODO elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.120.120.130.130.120.12
rgfailfailfailfailfailfail
agfailfailfailfailfailfail

results for compressed tarball search

grepping FIXME|TODO elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.340.350.350.350.340.34
rgfailfailfailfailfailfail
agfailfailfailfailfailfail

performance report arm64

found ugrep 1356434 byte executable located at /usr/local/bin/ugrep

ugrep 7.0.0 aarch64-apple-darwin21.6.0 +neon/AArch64; -P:pcre2jit; -z:zlib,bzip2,lzma,lz4,zstd,brotli,7z,tar/pax/cpio/zip
License: BSD-3-Clause; ugrep user manual: <https://ugrep.com>
Written by Robert van Engelen and others: <https://github.com/Genivia/ugrep>
Ugrep utilizes the RE/flex regex library: <https://github.com/Genivia/RE-flex>

found rg 6680304 byte executable located at /opt/homebrew/bin/rg

ripgrep 14.1.0

features:-simd-accel,+pcre2
simd(compile):+NEON
simd(runtime):+NEON

PCRE2 10.42 is available (JIT is available)

found ag 111344 byte executable located at /opt/homebrew/bin/ag

ag version 2.2.0

Features:
  +jit +lzma +zlib

found ggrep 266352 byte executable located at /opt/homebrew/bin/ggrep

ggrep (GNU grep) 3.11
Packaged by Homebrew
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others; see
<https://git.savannah.gnu.org/cgit/grep.git/tree/AUTHORS>.

grep -P uses PCRE2 10.44 2024-06-07

results for large text file search

grepping rol elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.020.020.010.020.020.010.020.000.00
rg0.020.020.020.020.020.020.010.020.000.00
ag0.540.540.430.400.400.410.160.170.170.17
ggrep0.100.120.130.130.370.370.100.350.000.05

grepping the elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.050.050.090.060.060.130.020.030.000.00
rg0.040.050.110.060.080.180.020.050.000.00
ag1.941.940.841.891.890.810.210.210.210.21
ggrep0.100.130.400.230.502.220.080.450.000.00

grepping cycles|semigroups elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.020.020.020.020.020.020.020.000.00
rg0.020.020.020.020.030.030.020.030.000.00
ag0.520.520.520.510.500.510.280.270.290.27
ggrep0.150.170.170.260.240.240.150.220.000.00

grepping ro[a-z]*ds elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.030.030.040.040.040.030.040.000.00
rg0.020.030.030.040.040.050.030.040.000.00
ag0.440.440.420.410.410.410.170.170.180.16
ggrep0.250.270.280.300.580.580.250.560.000.00

grepping r[a-z]*st elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.060.060.070.070.080.080.050.080.000.00
rg0.130.140.180.110.130.130.130.120.000.00
ag1.171.170.690.460.460.430.320.190.310.19
ggrep0.490.510.720.641.821.860.481.800.000.00

grepping [A-Z][a-z]+ny elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.020.020.020.030.030.020.020.000.00
rg0.010.020.020.020.090.160.010.080.000.00
ag0.630.630.540.642.191.960.281.660.271.66
ggrep0.160.180.210.180.981.900.160.950.000.00

grepping [A-Z][a-z]{11}ny elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.010.010.010.020.020.020.010.020.000.00
rg0.010.020.020.020.110.110.010.110.000.01
ag0.400.400.390.291.541.540.201.310.191.31
ggrep0.190.210.210.211.421.420.191.400.020.17

grepping \w+ny elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.030.030.030.040.040.020.030.000.00
rg0.020.030.030.030.090.180.020.080.000.00
ag3.333.333.002.302.292.002.701.692.701.69
ggrep0.570.591.670.650.882.040.570.830.000.00

grepping ab(cd?)? elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.030.030.020.020.020.010.020.000.00
rg0.030.040.040.030.080.080.020.080.000.00
ag1.081.080.560.450.450.450.190.210.190.21
ggrep0.080.100.200.211.051.060.071.030.000.00

grepping x*y*z* elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.080.090.140.090.100.100.030.100.000.00
rg0.080.135.130.150.150.960.050.060.000.00
ag3.983.994.013.053.033.013.712.783.712.78
ggrep0.110.197.600.731.2816.780.041.120.000.00

grepping (19|20)[0-9]{2}/(0[1-9]|1[012])|(0[1-9]|1[012])/(19|20)[0-9]{2} elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.020.020.020.020.020.020.020.020.000.00
rg0.030.030.030.050.050.050.030.050.000.00
ag0.380.380.370.360.370.360.130.120.130.12
ggrep0.040.050.060.070.070.080.040.060.000.00

grepping (https?://|www\.)[-a-zA-Z0-9@:%._+~#=]{1,253}\.[-a-zA-Z0-9]{2,}\.[][a-zA-Z0-9()@:%_+.~#?&/=\-]+ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.040.040.040.040.050.050.030.040.000.00
rgfailfailfailfailfailfailfailfailfailfail
ag0.600.600.500.590.600.500.190.190.190.19
ggrep3.403.426.953.533.677.433.393.650.000.00

grepping [a-z]+-[a-z]+ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.040.040.040.040.050.020.030.000.00
rg0.040.050.060.060.060.080.030.040.000.00
ag2.222.231.732.172.171.671.331.281.331.28
ggrep1.351.382.721.531.493.381.351.460.000.00

grepping '' elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.070.090.090.090.090.090.030.030.000.00
rg0.080.145.130.150.150.950.050.060.000.00
agfailfailfailfailfailfailfailfail0.032.02
ggrep0.110.197.440.701.1615.310.041.000.000.00

grepping ^$ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.040.040.040.040.040.030.030.000.00
rg0.040.050.060.540.540.540.040.520.000.00
ag0.410.410.39failfailfail0.15fail0.15fail
ggrep0.060.090.091.552.862.870.052.830.000.00

results for large text file search for words from files

grepping -fwords/1.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.040.040.040.040.090.190.020.050.000.00
rg0.030.040.050.050.150.380.020.110.000.00
ggrep0.080.100.130.110.532.310.070.470.000.00

grepping -fwords/2.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.100.100.100.100.110.110.100.110.000.00
rg0.110.110.110.127.487.480.117.470.000.00
ggrep0.630.650.660.650.310.350.630.300.000.00

grepping -fwords/3.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.130.130.140.140.310.310.120.310.000.00
rg1.201.211.481.3512.1112.141.1912.110.000.01
ggrep0.880.911.071.005.826.060.885.800.000.01

grepping -fwords/4.txt elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.140.140.140.140.270.280.140.260.000.00
rg0.220.220.232.44175.62181.220.21177.810.000.04
ggrepfailfailfailfailfailfailfailfailfailfail

results for large text file search with formatted output

grepping Sherlock|Holmes elapsed real time (s)

search--json--csv--xml--hex
ugrep0.010.010.010.01
rg0.02failfailfail
ag0.33fail0.33fail

results for large text file search with replaced output

grepping flop elapsed real time (s)

search--replace=flip
ugrep0.01
rg0.01

results for large text file search with context

grepping ^$ elapsed real time (s)

search-nA9-nB9-nC9-winA999-winB999-winC999
ugrep0.110.120.130.130.150.13
rg0.110.120.120.660.670.66
ag0.480.590.59failfailfail
ggrep0.170.210.193.033.183.14

grepping begin|end elapsed real time (s)

search-nA9-nB9-nC9-winA999-winB999-winC999
ugrep0.070.060.100.120.150.12
rg0.050.050.070.140.150.14
ag0.991.101.090.730.840.82
ggrep0.220.230.250.770.820.78

results for large long lines JSON file search

grepping abc[a-z0-9]+ elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.030.030.020.020.020.020.010.020.000.00
rg0.020.020.020.020.020.020.010.020.000.00
ag1.391.390.530.430.430.350.110.110.110.11
ggrep0.130.140.240.231.491.620.131.490.000.05

results for OpenSSL source code repo directory search

grepping FIXME|TODO elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.020.020.020.030.030.03
rg0.090.090.090.090.090.09
ag0.070.070.060.060.060.06
ggrep0.110.130.180.180.170.16

grepping char|int|long|size_t|void elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.040.040.040.040.040.03
rg0.090.080.090.070.080.08
ag0.320.240.230.190.060.06
ggrep0.170.220.320.420.290.13

grepping ssl-?3(\.[0-9]+)? elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.020.020.030.030.040.02
rg0.090.090.090.090.090.09
ag0.070.070.070.070.070.07
ggrep0.100.110.120.120.100.10

results for Swift source code repo directory search

grepping _(RUN|LIB|NAM)[A-Z_]+ elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.190.190.190.190.230.20
rg0.770.770.760.760.770.77
ag0.700.700.700.710.710.71
ggrep0.490.570.620.620.580.54

grepping String|Int|Double|Array|Dictionary elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.240.220.250.250.250.22
rg0.740.740.710.690.730.75
ag1.060.740.890.800.640.64
ggrep0.610.751.591.821.520.64

grepping (class|struct)\sS[a-z]+T elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.190.190.200.200.230.20
rg0.760.770.770.760.760.77
ag0.670.670.650.650.660.66
ggrep0.630.710.880.890.830.79

grepping for\s[a-z]+\sin elapsed real time (s)

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.200.200.200.200.220.20
rg0.760.760.760.770.760.76
ag0.670.700.700.700.680.69
ggrep0.590.600.770.780.720.65

results for bz2 compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep1.971.971.981.970.280.28
rg1.991.991.992.000.270.27
agfailfailfailfailfailfail

results for gz compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.300.300.300.300.040.04
rg0.290.290.290.290.040.04
agfailfailfailfailfailfail

results for lz4 compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.050.050.050.050.010.01
rg0.070.080.070.080.010.01
agfailfailfailfailfailfail

results for xz compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep1.081.091.081.080.150.15
rg1.111.121.111.110.160.15
agfailfailfailfailfailfail

results for zstd compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.110.120.110.120.010.01
rg0.100.110.100.11failfail
agfailfailfailfailfailfail

results for zip archived repo search

grepping FIXME|TODO elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.200.200.210.210.200.20
rgfailfailfailfailfailfail
agfailfailfailfailfailfail

results for tar archived repo search

grepping FIXME|TODO elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.060.070.070.080.060.07
rgfailfailfailfailfailfail
agfailfailfailfailfailfail

results for compressed tarball search

grepping FIXME|TODO elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep0.190.190.200.200.190.19
rgfailfailfailfailfailfail
agfailfailfailfailfailfail