When faced with a large list of output data, I often reach for grep
to narrow down the results. This can help me find what I'm looking for, but it often involves a little trial and error.
We can enhance this process by making it interactive. FZF
, a fuzzy finding utility, is the perfect tool for the job. It is speedy, composable, and smart.
In this quick video from my Modern CLI series, I show how FZF
can be used to interactively narrow down the list of installable package versions output by asdf
.
The Details
I needed to find a version of Node.js to install on my machine, but I wasn't sure what was available. Because I use asdf
to manage my version of Node, I used the following command:
$ asdf list-all nodejs
This produced pages and pages of output in my terminal. Rather than trying to scroll up to the right spot or get a grep
command just right, I decided to pipe the output to fzf
.
$ asdf list-all nodejs | fzf
The results of the asdf
command are fed into fzf
which opens a prompt at the bottom of the terminal. I can type anything that might match the results.
For instance, what if I type 10
into the prompt.
> 10
This will narrow it down to everything that contains 10
. Because it is fuzzy, it will include results like 4.10.0
, 10.9.0
, and even 4.1.0
. The results are ordered by best match.
If I want to find Node versions that are major-version 10, then I can inject a little regex into my search term.
> ^10
The ^
character in regex means that the following atom (10
) should be anchored to the beginning of the string. Now the results are just those under major-version 10.
I can narrow it further by adding in the minor version:
> ^10.1
And because this whole thing is interactive, I can quickly change the 0
to a 2
:
> ^12.1
to find major-version 12 packages.
This is just one example of interactively exploring a large list of output with fzf
. Remember that you can pipe output from any command into fzf
. Install fzf
and give it a try.
There is more where that came from. If you enjoyed this post and screencast, subscribe to my newsletter and check out the rest of the Modern CLI series.
Discussion (1)
+1 subscriber for your series :D
I never really digged into
fzf
entrails, but I use it everrywhere I can.