I have typed grep -r more times than I have typed my own name, and last month I more or less stopped. The replacements are ripgrep and fd, and the reason is not nostalgia or hype. It is that they are faster, they are correct about the things I always got wrong, and they have made searching a large codebase feel cheap again.
Let me be specific, because "it's faster" is the kind of claim that means nothing on its own.
The thing that actually changed my habits
The first time rg searched a repository I knew well, it returned before I had finished moving my hand off the return key. Not metaphorically: a recursive search across a tree that took grep -r a couple of seconds came back effectively instantly. Ripgrep is built on a fast regex engine, it parallelises across files, and crucially it skips the rubbish by default.
That last part is the bit that won me over. By default ripgrep respects your .gitignore, skips hidden files, and ignores binary files. Every grep -r I have ever run drowned the result in matches from node_modules, .git, build output and minified bundles, and I learned to mentally filter that noise, or to build up a --exclude-dir incantation I could never remember. Ripgrep just does the right thing without being asked, and when I do want everything I add -uuu and opt back in.
rg 'TODO\(.*\)' --type rust
rg -i 'connect(timeout|_timeout)'
rg -l 'deprecated' src/
The --type filtering is the other small thing that adds up. I search a lot of mixed repositories, and being able to say "only the Go files" or "only the YAML" with -t go or -t yaml, rather than constructing a --include glob, removes a tiny friction I had stopped noticing until it was gone.
fd, for when find was always going to win an argument
find is a magnificent tool and I will defend it, but its syntax is from another era and I have never internalised it. I can write find . -name '*.go' from memory and almost nothing beyond that. Anything involving -prune, or combining predicates, or -exec with its \; and {}, I look up every single time, every year, forever.
fd is what I actually wanted find to be for ninety per cent of jobs. The common case is the short case:
fd '\.go$'
fd config /etc
fd -e md -e txt
fd -e log -x rm
It ignores the same gitignore'd noise ripgrep does, it is colourised, it is fast, and the syntax matches the way I think about the problem. "Find me files whose name looks like this" is fd 'this', not a recitation of predicates. The -x flag gives me the -exec behaviour I always had to look up, in a form I can remember.
Where the old tools still belong
I have not deleted grep and find, and I would argue against anyone who did. There are real reasons to keep them sharp.
The big one is ubiquity. ripgrep and fd are not on the production box, the customer's box, the minimal container, or the rescue shell. POSIX grep and find are on every Unix you will ever ssh into, and when you are three jumps deep into someone else's infrastructure at two in the morning, the tool that is already there beats the tool you wish were there. I keep my grep and find fluent precisely so that environment does not slow me down.
The other is scripting and portability. If I write a shell script that other people will run on other machines, it gets POSIX tools, because I cannot assume the cargo-cult of nice binaries is installed. The new tools are for my interactive life, where I control the environment and value the speed. The old tools are for the contract I am making with someone else's machine.
So this is not a "throw away grep" post, however much the title flirts with it. It is a "stop using grep for the thing ripgrep is plainly better at" post. My day is mostly interactive search in repositories I control, and for that, the new tools are not a marginal improvement, they are a different experience. The searches are so cheap now that I run more of them, more speculatively, and that has quietly changed how I explore unfamiliar code: I just ask, because asking is free.
If you have been meaning to try them and have not, the switch costs an afternoon of unlearning muscle memory and pays it back inside a week. Install both, alias nothing, and let the speed retrain your hands. Mine retrained themselves before I had decided to let them.