Very nice. Not only fast, but feels modern. Tried it out on a 3.5GB JSON file: # rg rg erzg4 k.json > /dev/null 1.80s user 2.54s system 53% cpu 8.053 total # rg with 4 threads rg -j4 erzg4 k.json > /dev/null 1.76s user 1.29s system 99% cpu 3.059 total # OS X grep grep erzg4 k.json > /dev/null 60.62s user 0.96s system 99% cpu 1:01.75 total # GNU Grep ggrep erzg4 k.json > /dev/null 1.96s user 1.43s system 88% cpu 2.691…
My guess is that since you ran `rg` first, the file wasn't in memory, and you ended up benchmarking disk IO. (Notice the sys time decrease from your first run to the second run.) Subsequent commands then run faster with the file already in memory. This is one of many reasons why assembling the benchmarks in my blog post was so difficult. For example, on every command I benchmarked, I ran them 3 times for "warmup" and…
# ggrep
zerogravitas$ for x in {1..4}; do (time ggrep erzg4 k.json >/dev/null); done
ggrep erzg4 k.json > /dev/null 1.96s user 0.67s system 99% cpu 2.641 total
ggrep erzg4 k.json > /dev/null 1.95s user 0.68s system 99% cpu 2.660 total
ggrep erzg4 k.json > /dev/null 2.00s user 0.66s system 99% cpu 2.672 total
ggrep erzg4 k.json > /dev/null 1.96s user 0.67s system 98% cpu 2.662 total
# rg
zerogravitas$ for x in {1..4}; do (time rg erzg4 k.json >/dev/null); done
rg erzg4 k.json > /dev/null 1.76s user 1.40s system 99% cpu 3.180 total
rg erzg4 k.json > /dev/null 1.77s user 1.31s system 99% cpu 3.088 total
rg erzg4 k.json > /dev/null 1.74s user 1.36s system 99% cpu 3.128 total
rg erzg4 k.json > /dev/null 1.76s user 1.41s system 97% cpu 3.265 total
# rg --no-mmap
zerogravitas$ for x in {1..4}; do (time rg erzg4 k.json --no-mmap >/dev/null); done
rg erzg4 k.json --no-mmap > /dev/null 0.98s user 0.75s system 99% cpu 1.743 total
rg erzg4 k.json --no-mmap > /dev/null 0.99s user 0.75s system 99% cpu 1.740 total
rg erzg4 k.json --no-mmap > /dev/null 1.01s user 0.76s system 99% cpu 1.772 total
rg erzg4 k.json --no-mmap > /dev/null 0.99s user 0.75s system 99% cpu 1.754 total
# rg -j4
zerogravitas$ for x in {1..4}; do (time rg erzg4 k.json -j4 >/dev/null); done
rg erzg4 k.json -j4 > /dev/null 1.75s user 1.35s system 98% cpu 3.134 total
rg erzg4 k.json -j4 > /dev/null 1.75s user 1.44s system 98% cpu 3.224 total
rg erzg4 k.json -j4 > /dev/null 1.80s user 1.38s system 99% cpu 3.204 total
rg erzg4 k.json -j4 > /dev/null 1.80s user 1.35s system 99% cpu 3.164 total
# rg -j4 --no-mmap
zerogravitas$ for x in {1..4}; do (time rg erzg4 k.json -j4 --no-mmap >/dev/null); done
rg erzg4 k.json -j4 --no-mmap > /dev/null 0.98s user 0.75s system 99% cpu 1.740 total
rg erzg4 k.json -j4 --no-mmap > /dev/null 0.97s user 0.74s system 99% cpu 1.721 total
rg erzg4 k.json -j4 --no-mmap > /dev/null 0.99s user 0.75s system 99% cpu 1.752 total
rg erzg4 k.json -j4 --no-mmap > /dev/null 0.98s user 0.76s system 99% cpu 1.748 total
Sounds like "alias rg=rg --no-mmap" is a good idea on a Mac.