Using Search Patterns and Global Commands

Besides using line numbers and address symbols (, $, %), ex (including the ex mode of vi, of course) can address lines by using search patterns (). For example:

Note that patterns are delimited by a slash both before and after.

If you make deletions by pattern with vi and ex, there is a difference in the way the two editors operate. Suppose you have in your file practice the lines:

With a screen editor you can scroll the page, move the cursor, delete lines, insert characters and more, while seeing results of your edits as you make them.


Keystrokes Results
d/while
With a screen editor you can scroll the page, move the cursor, while seeing results of your edits as you make them.


The vi delete to pattern command deletes from the cursor up to the word while but leaves the remainder of both lines.
:.,/while/d
With a screen editor you can scroll the of your edits as you make them.


The ex command deletes the entire range of addressed lines; in this case both the current line and the line containing the pattern. All lines are deleted in their entirety.

Global Searches

In vi you use a / (slash) to search for patterns of characters in your files. By contrast, ex has a global command, g, that lets you search for a pattern and display all lines containing the pattern when it finds them. The command :g! does the opposite of :g. Use :g! (or its synonym :v) to search for all lines that do not contain pattern.

You can use the global command on all lines in the file, or you can use line addresses to limit a global search to specified lines or to a range of lines.

g can also be used for global replacements. For example, to search for all lines that begin with WARNING: and change the first word not on those lines to NOT:

<..\> 
:g/^WARNING:/s/\<not\>/NOT/

- LL from Anonymous' vi Editor, Chapter 5