Dada
|> Structures
|> Algorithms

Find and Replace Recursively

Using grep and sed to find and replace

grep -rl "Chunky" . | LC_ALL=C xargs sed -i ".bak"  "s/Chunky/Bacon/"

Every so often we need to mass edit some directories. That should be the job of sed. Yet sed doesn't find files, so you need another utility. There you have a choice of tools. For this case I decided to use grep. Although I use ack for searching patterns, I thought that grep would be the right tool here.

Now the explanation of the example.

Magical bit Explanation
grep Our second favorite tool for finding patterns in files. Our favorite is ack, but grep is more appropriate here.
-rl Our grep options. r = recursive search. l = output the name of the files
"Chunky" Our pattern
. The direction we want to search. In this case, start from the current directory
the pipe The magic unix character that lets us pass output into another command
LC_ALL=C The esoteric incantation to have sed behave in MacOS. It has to do with encoding
xargs Unix utility to transform standard input into command arguments
sed Our batch editor
-i The option to edit in place
".bak" The extension that we want to give to the backup file that sed -i will create
"s/Chunky/Bacon/" The sed command we want to execute. In this case substitute Chunky with Bacon

You can clean up the backup files with

grep -rl "Chunky" . | xarg rm -f