blackrobot blackrobot - 4 months ago 6x
Bash Question

Best way to do a find/replace in several files?

what's the best way to do this? i'm no command line warrior, but i was thinking there's possibly a way using grep and cat.

i just want to replace a string that occurs in a folder and sub-folders. what's the best way to do this? i'm running ubuntu if that matters.


find . -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'

The first part of that is a find command to find the files you want to change. You may need to modify that appropriately. The "xargs" command takes every file the find found and applies the "sed" command to it. The "sed" command takes every instance of "from" and replaces it with "to". That's a standard regular expression, so modify it as you need.

If you are using svn beware. Your .svn-directories will be search and replaced as well. You have to exclude those, e.g., like this:

find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'


find . -name .svn -prune -o -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'