Linux bulk search and replace

Doing a bulk search and replace across a set of files is actually surprisingly easy. sed is the key. It has a flag – i that will modify the files passed to it in-place.

$ sed -e 's/TextToFind/Replacement/' -i file1 file2 file3

Tie this power with either grep -l . [Thanks to Steve for pointing out a mistake in the following, now corrected]

$ grep -l TextToFind * |xargs sed -e 's/TextToFind/Replacement/' -i

or find

$ find . -exec sed -e 's/TextToFind/Replacement' -i {} ;

If there are multiple changes you want to make, just put them all into a file and pass it in via the -f flag.

file: replacements.patterns

s/TextToFind1/Replacement1/
s/TextToFind2/Replacement2/
s/TextToFind3/Replacement3/

and the command, using find to iterate through all files in the current directory and subdirectories.

find . -exec sed -f replacements.patterns -i {} ;

et voila – hope it helps.

  • By Steve, 7 July, 2011 @ 01:02

    Thanks – this was exactly what i was looking for, didn’t want to use perl for something i knew could be done via the command line.

    Cheers Steve.

  • By Steve, 7 July, 2011 @ 01:24

    Ps, you are missing the closing ‘/’ on the grep version.

  • By Siddhesh Sawant, 28 August, 2012 @ 20:48

    saved a lot of time. thanks a ton brother

Other Links to this Post

WordPress Themes