skip to content
Just Change Direction

Grep for fun and profit

/ 2 min read

I am pretty rubbish at the command line despite being someone who likes to take the time to write scripts. grep is a cli tool that I have never got my teeth into as I always tended to default to cmd + shift + f in VSCode. Inspired by this fantastic article on the MDN Blog (which has so much really great context by the way), I decided to use to grep to find an old document from within my legacy Obsidian vaults.

My goal was to find any references to the term “hoc” in an old vault of mine. I need to do the following:

  • search the whole directory (grep defaults to a specific file)
  • make it case insensitive (I want to match HOC as well as Hoc etc)
  • filter out binary files (which often are a ton of garbled characters under the hood and could turn up matches I am not interested in)
  • only target certain file types (namely: .md, .txt and .mdx)

The last part proved a little difficult as grep only takes a single term per --include arg so I had to delve around in Stackoverflow to find this excellent explanation of how to do this in a more succinct way.

Here is the resultant command:

Terminal window
grep -ri --binary-files=without-match '--include=*.'{md,txt,mdx} "hoc" ./directory-to-target

Here is what the command does:

  • -r searches recursively (i.e. on a directory, not just a file)
  • -i makes the search term case insensitive
  • -ri is the above two terms combined
  • --binary-files=without-match means that grep ignores binary files
  • '--include=*.'{md,txt,mdx} is the magic part. Rather than have to write out each file extension I want to include like --include=*.md --include=*.mdx as so on, this command uses some trickery to make the {…} shorthand work. Check out the full explanation here.

It was fun to use grep for this and I hope to get more fluent with it. Despite this whole post, I ended up opening my Obsidian in VSCode and waiting for it to be indexed so I could use the VSCode search. grep was much, much quicker but it is hard to beat the ability to click into the files themselves.