One of the most useful skills you can acquire to make you faster at almost any job that uses a computer is getting good at finding text in your current working diretory and identifying the files that its in. I often use the silver searcher ag
or ripgrep rg
to find files in large directories quickly. Both have a sane set of defaults that ignore hidden and gitignored files, but getting them to list only the filenames and not the matched was not trivial to me.
I've searched throught he help/man pages many times looking for these
flags and they always seem to evade me.
ag
Passing the flag -l
to ag will get it to list only the filepath, and not the match. Here I gave it a --md
as well to only return markdown filetypes. ag
supports a number of filetypes in a very similar way.
ag nvim --md -l
rg
Giving rg
the --files-with-matches
flag will yield you a similar set of results, giving only the filepaths themselves and not the match statement. Also passing in the -g "*.md"
will similarly yield only results from markdown files.
rg --files-with-matches you -g "*.md"
This article is part of my til series, an effort to build a short content pipeline that will eventually form larger content pieces.
Top comments (3)
rg
takes the same-l
alternative asag
; it's taken fromgrep
. Normally I'm a fan of using the longer flag and option names but since it's already a known one I like to use-l
with any of thegrep
alternatives.Wow, I was not aware of
ag
andrg
. I will look into them.Is it possible for to sum up in a line or two why you like these over
grep
?They are a bit faster and have some nice modern features. For instance, by default they are recursive, but ignore hidden and gitignored files. If you have a virtual environment or node_modules in your project directory this can make a search infinitely faster than it is compared to grep digging around in node_modules.