Besides using line numbers and address symbols (.,
$
, %
),
ex (including the ex
mode of vi, of course) can address lines
(Section 20.3) using search patterns (
Section 32.1). For example:
:/
pattern
/d
Deletes the next line containing pattern.
:/
pattern
/+d
Deletes the line below the next line
containing pattern. (You could also use
+1
instead of +
alone.)
:/
pattern1
/,/
pattern2
/d
Deletes from the next line (after the current line) that contains pattern1 through the next following line that contains pattern2.
:.,/
pattern
/m23
Takes text from current line (.) through the next line containing pattern and puts it after line 23.
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 named practice the following lines:
With a screen editor you can scroll the
page, move the cursor, d
elete lines, insert
characters and more, while seeing results
of your edits as you make them.
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/
pattern
/
Finds (moves to) the last occurrence of pattern in the file.
:g/
pattern
/p
Finds and displays all lines in the file containing pattern.
:g!/
pattern
/nu
Finds and displays all lines in the file that don't contain pattern; also displays line number for each line found.
:60,124g/
pattern
/p
Finds and displays any lines between 60 and 124 containing pattern.
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 Learning the vi Editor (O'Reilly, 1998)