DEV Community

Waylon Walker
Waylon Walker

Posted on • Originally published at waylonwalker.com

List all the files containing a phrase | ag, rg

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

This article is part of my til series, an effort to build a short content pipeline that will eventually form larger content pieces.

https://waylonwalker.com/til

Discussion (3)

Collapse
moopet profile image
Ben Sinclair

rg takes the same -l alternative as ag; it's taken from grep. 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 the grep alternatives.

Collapse
mccurcio profile image
Matt Curcio

Wow, I was not aware of ag and rg. I will look into them.

Is it possible for to sum up in a line or two why you like these over grep?

Collapse
waylonwalker profile image
Waylon Walker Author

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.