Home

Awesome

performance reports

Updated benchmarks are automatically generated and published when a new version of ugrep is released. Last update Fri Aug 23 14:49:02 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 1415832 byte executable located at /usr/local/bin/ugrep

ugrep 6.5.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.010.01
rg0.020.030.030.030.030.030.020.030.000.01
ag0.660.650.390.340.350.340.100.100.100.10
ggrep0.110.130.140.150.520.530.100.500.000.07

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.090.170.110.130.310.040.070.000.00
ag3.743.751.113.603.601.050.140.140.140.14
ggrep0.130.170.700.340.873.830.090.730.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.030.030.030.050.050.030.050.000.00
ag0.400.410.390.410.420.400.150.160.150.17
ggrep0.210.230.220.320.290.290.200.270.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.040.060.000.00
rg0.040.040.040.060.060.060.040.060.000.00
ag0.440.440.390.400.400.390.130.140.140.14
ggrep0.350.370.370.400.830.850.360.830.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.120.060.100.000.00
rg0.150.170.210.170.190.190.130.190.000.00
ag1.841.840.690.480.470.410.200.150.190.15
ggrep0.890.901.291.133.203.250.813.140.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.030.040.040.020.030.000.00
rg0.020.030.030.030.120.210.020.100.000.00
ag0.740.750.530.731.751.190.230.840.220.84
ggrep0.260.280.330.281.713.260.241.610.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.030.030.010.01
rg0.020.020.020.030.140.140.020.140.000.02
ag0.340.350.350.230.410.410.130.170.130.17
ggrep0.300.320.320.332.452.460.312.440.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.230.030.100.010.00
ag1.631.600.871.571.560.880.460.490.460.50
ggrep1.101.123.191.271.583.711.051.430.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.060.070.040.110.110.030.110.000.00
ag1.881.880.660.430.430.420.150.170.140.17
ggrep0.110.140.320.331.631.650.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.230.120.140.130.040.130.000.01
rg0.150.2410.500.260.271.740.090.100.000.00
ag4.274.254.272.422.422.294.062.154.192.05
ggrep0.200.3517.651.622.9537.730.062.560.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.030.020.020.030.020.020.000.00
rg0.040.040.040.070.070.070.040.070.000.00
ag0.400.400.380.400.390.380.140.140.140.13
ggrep0.050.070.070.090.100.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.800.810.550.810.810.560.150.160.150.16
ggrep5.926.0912.275.836.0812.145.655.900.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.070.080.090.090.120.050.060.000.00
ag2.122.100.932.142.160.950.370.410.380.41
ggrep2.732.745.233.052.976.522.582.820.000.00

grepping '' elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.090.150.160.160.150.150.040.040.000.00
rg0.150.2510.040.260.261.680.080.100.000.00
agfailfailfailfailfailfailfailfail0.061.19
ggrep0.200.3516.961.532.6434.780.072.220.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.030.000.00
rg0.060.080.090.790.760.760.050.750.000.00
ag0.410.400.37failfailfail0.11fail0.11fail
ggrep0.100.150.152.844.634.680.094.580.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.160.420.030.100.000.00
ggrep0.130.160.210.170.914.010.110.770.000.00

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

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.210.220.210.210.270.260.200.260.000.00
rg0.140.140.140.1711.6411.820.1411.730.010.01
ggrep0.960.950.990.960.420.470.930.400.000.00

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

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.240.250.260.250.500.490.220.500.000.01
rg0.200.210.230.2219.1719.240.1719.480.000.03
ggrep1.381.401.641.499.379.671.339.330.000.02

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

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.210.210.200.210.450.460.190.430.010.02
rg0.270.280.293.97369.60375.790.25369.370.010.11
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.03failfailfail
ag0.39fail0.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.170.180.200.200.230.20
rg0.180.190.201.010.990.99
ag0.560.770.76failfailfail
ggrep0.300.340.345.125.355.36

grepping begin|end elapsed real time (s)

search-nA9-nB9-nC9-winA999-winB999-winC999
ugrep0.120.090.150.180.220.19
rg0.080.090.110.230.240.23
ag1.511.731.751.021.251.20
ggrep0.330.340.371.271.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.030.030.030.030.030.020.030.000.00
ag2.732.730.710.570.560.360.100.110.100.10
ggrep0.190.190.360.352.152.310.182.130.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.040.040.040.040.050.04
rg0.040.040.040.040.040.04
ag0.060.060.060.060.060.06
ggrep0.160.170.240.250.230.23

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.05
rg0.070.070.070.080.060.06
ag0.500.350.350.230.080.08
ggrep0.260.340.520.710.450.21

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

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.040.040.040.040.050.04
rg0.040.040.040.040.040.04
ag0.070.060.060.060.060.06
ggrep0.140.140.170.170.150.15

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.260.260.250.260.25
rg0.260.260.260.260.260.26
ag0.430.420.430.420.400.38
ggrep0.780.910.980.970.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.290.280.26
rg0.330.310.330.340.330.30
ag1.410.811.080.840.490.48
ggrep1.011.182.642.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.260.250.260.270.26
rg0.250.260.260.270.260.27
ag0.420.410.430.440.430.41
ggrep0.961.051.321.321.301.23

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

search-n-nr-wn-wnr-win-winr-wino-winor-wic-wicr-wil-wilr
ugrep0.270.260.260.260.260.26
rg0.300.260.260.270.270.26
ag0.540.460.470.430.390.39
ggrep0.890.881.181.191.151.04

results for bz2 compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep3.273.233.263.270.480.47
rg3.353.353.363.390.470.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.520.510.520.070.07
rg0.420.410.410.400.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.120.110.120.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.421.421.421.410.210.21
rg1.501.681.481.480.220.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.170.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.310.31
rgfailfailfailfailfailfail
agfailfailfailfailfailfail

results for tar archived repo search

grepping FIXME|TODO elapsed real time (s)

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

results for compressed tarball search

grepping FIXME|TODO elapsed real time (s)

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

performance report arm64

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

ugrep 6.5.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.530.430.400.400.400.160.160.160.17
ggrep0.100.120.130.140.370.370.100.360.000.05

grepping the elapsed real time (s)

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.050.050.080.060.070.130.020.030.000.00
rg0.040.050.110.060.080.180.020.050.000.00
ag1.941.940.831.891.890.810.200.210.200.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.030.030.020.020.000.00
rg0.020.020.020.020.030.030.020.020.000.00
ag0.520.520.520.500.500.500.280.260.280.26
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.020.040.000.00
ag0.440.440.420.410.410.400.170.170.170.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.080.080.080.050.080.000.00
rg0.130.140.190.110.120.130.130.120.000.00
ag1.161.160.680.460.460.430.310.190.310.18
ggrep0.490.510.720.641.811.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.020.020.020.020.090.160.010.080.000.00
ag0.620.620.530.642.181.950.271.650.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.020.020.020.020.020.020.020.020.000.00
rg0.010.010.010.020.110.110.010.110.000.01
ag0.390.390.390.281.541.540.191.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.323.322.992.292.292.002.691.692.691.69
ggrep0.570.591.670.650.862.070.560.880.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.071.070.550.450.450.450.180.210.180.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.070.090.140.090.100.100.030.100.000.00
rg0.080.145.130.150.150.970.050.060.000.00
ag4.013.983.983.033.023.023.742.783.732.78
ggrep0.110.187.630.721.2816.840.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.010.020.020.020.020.020.010.010.000.00
rg0.030.030.030.050.050.050.030.050.000.00
ag0.370.370.370.360.360.360.130.120.130.11
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.040.030.040.000.00
rgfailfailfailfailfailfailfailfailfailfail
ag0.600.600.500.580.590.500.190.190.190.19
ggrep3.403.426.963.533.677.423.403.640.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.050.050.020.030.000.00
rg0.040.050.060.060.060.080.030.040.000.00
ag2.212.221.722.162.171.671.331.281.331.28
ggrep1.351.382.711.531.493.371.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.022.02
ggrep0.110.197.450.701.1615.310.040.990.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.14fail0.14fail
ggrep0.060.090.091.552.862.870.052.820.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.200.020.050.000.00
rg0.030.040.050.050.150.370.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.130.130.130.130.150.150.120.150.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.320.120.310.000.00
rg1.201.211.481.3512.1012.121.1912.100.000.01
ggrep0.880.911.071.005.836.010.875.800.000.01

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

search-n-no-wn-win-wino-c-wic-l-wil
ugrep0.170.170.180.180.330.340.170.320.000.00
rg0.220.220.242.43175.57178.910.22176.730.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.32fail0.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.130.660.670.66
ag0.480.590.59failfailfail
ggrep0.170.210.203.013.183.14

grepping begin|end elapsed real time (s)

search-nA9-nB9-nC9-winA999-winB999-winC999
ugrep0.080.060.100.120.150.12
rg0.050.050.070.140.150.14
ag0.981.081.090.730.840.82
ggrep0.220.230.250.770.820.80

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.640.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.020.030.02
rg0.080.090.080.090.080.08
ag0.070.070.060.060.060.06
ggrep0.110.120.180.180.160.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.050.050.050.04
rg0.070.070.070.070.080.08
ag0.320.230.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.020.020.030.02
rg0.080.080.080.080.080.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.220.19
rg0.760.770.770.770.780.77
ag0.700.710.700.700.710.71
ggrep0.480.570.620.610.560.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.260.240.23
rg0.740.760.730.700.720.76
ag1.050.740.890.800.640.65
ggrep0.600.731.581.801.490.63

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.200.190.200.200.230.20
rg0.760.770.760.750.760.75
ag0.660.670.660.660.660.66
ggrep0.620.690.870.870.810.76

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.750.760.760.770.770.74
ag0.660.700.700.700.700.70
ggrep0.580.580.760.760.700.63

results for bz2 compressed large text file search

grepping landsnail elapsed real time (s)

search-z-zwin-zc-zwic-zl-zwil
ugrep1.971.981.981.970.280.28
rg1.992.001.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.081.091.090.150.15
rg1.111.121.111.110.150.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