Search and Replace across multiple files in linux

January 23, 2013

I had a group of files today that had a wrong link in them. I started changing them one-by-one until I realized how many files there were. I immediately knew I needed a way to search and replace the link across all these files, something I didn’t know was possible with a linux command. While technically you need 2 commands, there is a way to accomplish this.

I needed to change a link listed as “index.html” to “/admin”. I knew how to search in replace inside of Vim:

s/index.html/\/admin/g

Note the backslash to tell the command line the forward slash in “/admin” is not part of the command language. But how do I run this command on all files? Well first we need to get all files that have the “index.html” link. Grep is nice for that:

grep -lr -e 'index.html' * 

Now the part that I hadn’t realized before is, I can take the results of that search and run a command on each of those files. This is where the xargs command comes in:

xargs sed -i 's/index.html/\/admin/g'

So we can combine both of our commands with a pipe:

grep -lr -e 'index.html' * | xargs sed -i 's/index.html/\/admin/g'

Stay in Touch!

Subscribe to our newsletter.

Solutions Architecture

browse through our blog articles

Blog Archive