On occasions where I do need more advanced features such as excluding file patterns or directories, I find the man page to be pretty easy to understand.
On occasions where I do need more advanced features such as excluding file patterns or directories, I find the man page to be pretty easy to understand.
In addition, A+ for the ag's design for `mmap()` ing files instead reading them into a buffer.
Bench marks: Using Grep
```bash $ time grep -Rsn "kthreadd" ... real 0m25.341s user 0m5.738s sys 0m4.074s ```
Using ag: ```bash $ time ag "kthreadd" ...
real 0m2.182s user 0m1.306s sys 0m1.773s ```
I'd be careful with that. You may have just tested the awesomeness of linux caches :-)
Yes, it "looks" magnitudes faster:
]$ time grep -Rsn "kthreadd"
...
real 0m26.895s
user 0m3.131s
sys 0m3.151s
]$ time ag "kthreadd"
...
real 0m0.906s
user 0m1.930s
sys 0m1.186s
]$ time rg "kthreadd"
...
real 0m0.860s
user 0m1.756s
sys 0m1.123s
But wait, somehow grep got magnitutes faster too: ]$ time grep -Rsn "kthreadd"
...
real 0m2.961s
user 0m1.979s
sys 0m0.959s
And we can make both ag and rg slower: ]# echo 1 > /proc/sys/vm/drop_caches
]$ time ag "kthreadd"
...
real 0m17.761s
user 0m2.371s
sys 0m2.728s
]# echo 1 > /proc/sys/vm/drop_caches
]$ time rg "kthreadd"
...
real 0m19.276s
user 0m1.859s
sys 0m3.063sThis is really bad if the large file is some concatenated minimized javascript thing that is one massive line, then that really makes the results harder explore ( I tend to `ag foosearchterm | less -R` at that point) . Perhaps capping the line length in a result is another solution, if a line is over a couple hundred chars only show the relevant portion.
if you are using emacs, then rg (emacs interface to ripgrep) is just excellent. that when combined with embark and wgrep is almost magical in what it can do.