Recently I had to edit multiple files (239 in total) scattered in a bunch of directories and subdirectories. Here’s a quick and safe way to do it.
What I had to do was add the Google Analytics script snippet to a part of a website that was being maintained by a pair of <your favorite bad adjective here> developers.
So, first I thought of using sed or awk or something like that, but doing a quick search replace like that without checking if my match is correct in every instance in a bunch of files can lead to a big disaster.
But wait, I have Emacs! So, the first thing to do is find and list all the files you need to edit.
Open the parent directory
Use dired to open the parent directory where all the files and directories are. Open dired with:
and enter the path for the directory.
Find the files
Emacs will then prompt: “Run find (with args):”. So if you need to edit all HTML files, or in my case, PHP files, you type:
If you want all files regardless of type, enter
Basically you can type in any arguments you want if you know how to use the find command.
Mark the files you need to edit
A list of all found files will appear in a dired buffer. Now you need to mark the files you want to work with. Typically you’ll mark all files since you already filtered them. Press
tto toggle marks and all files will get marked. Or if you want to hand pick them, move the cursor to the file line or name and press
Do the find and replace
M-x dired-do-query-replace-regexpto run the find and replace command. It will prompt you first for the text you want to find, then will prompt you with the text you want to replace it with.
Then Emacs will start the find and replace operation, and will prompt you on every find if you want to replace the text or skip it. To replace, type
y, to skip to the next find type
n. To replace all occurrences without asking, type
!. To cancel the operation, type
Save the edited files
Now that you’ve made all these changes, you need to save the files. To avoid saving manually all files, you can open ibuffer
Which will list all you opened files (called buffers). Now, like in dired, you need to mark the buffers you want to work with. To mark all unsaved files, type
* uand then type
S(that’s shift+s, for the capital letter) to save them.
Easy and without a sweat.
photo by zyphichore on Flickr.