Useful CLI Tools
This is just a collection of CLI tools that I find particularly useful. They’re usually not part of a standard Linux distribution (and certainly not POSIX), and even though I value and appreciate being able to log in to any machine and just start working, I also appreciate being able to use more specialized tools in some environments such as the laptop I spend about 7 hours a day working on.
xsv
xsv is a stupidly fast and easy way to work with CSV files in the CLI.
Examples
# Find 10 most expensive products and output data as a table
xsv sort -Rs 'price' < products.csv | xsv slice -n 10 | xsv table
# Get stats about data, such as min/max, cardinality, etc.
xsv stats < products.csv
jq
jq is basically sed
for JSON. It can be
used to transform JSON or merely search it.
Examples
# Find i3's primary output
i3-msg -t get_outputs | jq 'map(select(.primary))'
# Get names of all dependencies in an NPM project
jq -r -M '.devDependencies,.dependencies | to_entries[] | "\(.key)"' < packages.json
# Prettify JSON in clipboard
xclip -o -selection clipboard | jq '.' | xclip -i -selection clipboard
rg
rg (aka. ripgrep) is another one of
BurntSushi’s brilliant tools. It’s a replacement for grep
and it’s
ridiculously fast. Since it’s a grep
replacement, there is no reason to post
a bunch of examples so instead here is an article by BurntSushi himself about
why rg
is so insanely fast.
fzf
fzf is a fuzzy finder that makes
live-searching through line-data a breeze. Where rg
is great for streams,
fzf
excels when it comes to interactive searches. They can even be used
together for file searching (see examples below).
Examples
# Live search through files in the current dir and below and open it in vi
vi $(rg --files | fzf)
# Live search through git branches and check out the selected one
# also display it a bit more sexily
git checkout $(git ls-branches | fzf --height=30 --layout=reverse)
The above examples are purely illustrative and there are better and more
elegant ways go about them, see the README for
fzf
for details about that.
Another runner-up for this position is peco
which does essentially the same but in a more simplistic way. It doesn’t quite
have the same ways of integrating with (Neo-)Vim and other tools but if you
don’t need that, peco
may be worth looking into.