Cheap Shared Hosting

Wednesday, December 19, 2007

Handy vi tip - opening a list of files from a grep command

My primary text editor of choice is VI (actually, vim) - a console-based text editor that I use via SSH on the various linux servers that I work with. There's also a windows version available that I use occasionally, but I'm more likely to use textpad for that work.

Anyways, vim when used via a console on a linux server is really quite powerful. Here's a handy tip - suppose you're working with a large number of files nested within multiple subdirectories - and you need to edit all the files that contain a certain string. Perhaps you need to open and edit every file that uses a certain javascript file (let's call it 'example.js').

First, you can find all the files that have this string in them by using grep to search recursively for it:
grep -r 'example.js' *

This will return a long list of files with the text where that string was found. But what you really need is just the file names that have the string. This can be done by adding the "-l" option to your grep command:
grep -rl 'example.js' *

Now you have your list of files, and you need some way to tell vi to open them. This is accomplished by simply putting the grep command within "`" characters:
vi `grep -rl 'example.js' *`

You can find that key at the top left of your keyboard. And voila - vi opens all the files, and you can edit that one at a time!

No comments: