vim FAQ: How do I perform a vim “search and delete” using a vim regular expression pattern (regex)?
Every once in a while when I’m using the vi editor (or vim) I find myself in a situation where I need to delete a bunch of lines in the file that match a particular pattern. In my younger days I used to get out of vi and then use sed or grep to get rid of those lines, but it turns out there’s a real easy way to do this in vi.
Seeing that this is an election year ... assuming you have a file open in vim, and you want to delete all lines containing the string “George Bush”, you’d just enter this vim search and delete command:
That’s all you need to do. This vim search/delete command will find and then delete all lines containing the pattern “George Bush”.
Here’s a brief explanation of how this vi/vim search and delete command works:
:character says "put vim in last-line mode".
gcharacters says "perform the following operation globally in this file".
dat the end of the command says "When you find this pattern, delete the line".
To delete all lines in a vim not matching a given pattern you can use one of these two commands:
or this one:
Both of these commands delete all lines not contain the simple pattern “foo”.
Hopefully the first command is fairly easy to remember, as the
! operator is often used to negate the meaning of a command in many Unix tools and languages. I can probably remember the
v command by thinking of the "grep -v" command, which reverses the meaning of a normal grep search.
Now that you've seen that example, all you need to do to delete with a regular expression (regex) is to replace the vim search pattern shown above with your own regex pattern. For instance, a simple regex pattern for this same example is "
If you'd like more vim search/delete regex examples, just leave a note in the Comments section below and I'll be glad to work some up.