You'll need ripgrep and pandoc to get started. You can read more about ripgrep here and pandoc here. I use both of these frequently and they're quite helpful.
You can install them both with homebrew:
brew install pandoc ripgrepNext, you'll need to add a preprocessor that handles docx files to ripgrep. It's easiest to put this preprocessing script somewhere on your PATH (find out what this is with echo $PATH). I chose /usr/local/bin.
The preprocessing script is below (feel free to remove the comments):
#!/bin/sh
# Put me on your PATH!
# I put this in /usr/local/bin
# -f filetype=docx
# -t to=plain
# -s single file
# - read from stdin
exec pandoc -f docx -t plain -s - I named mine rg-preprocess-docx. You'll need to set the correct permissions for this file by running chmod 755 rg-preprocess-docx.
After you do this, you can refer to it using ripgrep with the --pre argument. So you could search all docx files for "apples" in your Downloads folder by calling:
rg --pre rg-preprocess-docx 'apples' ~/Downloads/*.docxIt might be helpful to add an alias to do this without passing the flag, so you can add an alias to your .bash_profile, .bashrc, or .zshrc (whichever you use) that is:
alias rg-docx="rg --pre rg-preprocess-docx"Then you could do the above search (after running a source .zshrc or opening a new terminal) by running:
rg-docx -w 'apples' ~/Downloads/*.docx
🎉
...
Extra bonus points
You can make your alias the following to automatically only preprocess and search docx files (instead of using a glob):
alias rg-docx="rg --pre rg-preprocess-docx --pre-glob '*.docx' --type-add 'docx:*.docx' -tdocx"
Then you can do:
rg-docx -w 'apples' ~/Downloads/