Many line editor commands are not particularly useful in scripts.
The two commands that you will use far and away the most often are
s
(substitute), to replace one pattern with another, and
d
(delete) to delete one or more lines. On occasion, though,
you'll want to insert text from a script.
(
Editing scripts built
by
diff
(
28.9
)
make heavy use of insert,
append, delete, and change commands.) And of course, you need
commands to write and quit the editor.
Here's the syntax of most of the commands you may encounter in
ex
editing scripts.
(The
ed
editor understands the abbreviated versions of some,
but not all of, these commands.)
Elements in [brackets] are optional; don't type the
[
or
]
.
(The leading colon is the
ex
command character
used to issue an
ex
command
from
vi
; in a script, the colon would be omitted.)
-
append
-
[address]
a
[
!
]
text
\.
Append
text
at specified
address
, or at present address if
none is specified. Add a
!
to switch the
autoindent
setting that will be used during input. For example, if
autoindent
was enabled,
!
disables it.
-
change
-
[address]
c
[
!
]
text
\.
Replace the specified lines with
text
. Add a
!
to switch
the
autoindent
setting during input of
text
.
-
copy
-
[address]
co
destination
[address]
t
destination
Copy the lines included in
address
to the specified
destination
address.
:1,10 co 50
:1,10t50
-
delete
-
[address]
d
[buffer]
Delete the lines included in
address
.
If
buffer
is specified, save or append the text to the named buffer.
:/Part I/,/Part II/-1d
Delete to line above "Part II"
:/main/+d
Delete line below "main"
:.,$/d
Delete from this line to last line
-
global
-
[address]
g
[
!
]
/
pattern
/
[
commands
]
Execute
commands
on all lines that contain
pattern
or, if
address
is specified, on all lines within that range.
If
commands
are not specified, print all such lines.
(Exception: doesn't print when you use it from
vi
by typing
:
first. You'll need to add a
p
, as in the second example below).
If
!
is used, execute
commands
on all lines that
don't
contain
pattern
.
:g/Unix/
:g/Unix/p
:g/Name:/s/tom/Tom/
-
insert
-
[address]
i
[
!
]
text
\.
Insert
text
at line before the specified
address
, or at present
address if none is specified. Add a
!
to switch the
autoindent
setting during input of
text
.
-
move
-
[address]
m
destination
Move the lines specified by
address
to the
destination
address.
:.,/Note/m /END/
Move block after line containing "END"
-
print
-
[address]
p
[count]
Print the lines specified by
address
.
count
specifies the number of lines to print, starting with
address
.
:100;+5p
Show line 100 and the next five lines
-
quit
-
q
[
!
]
Terminate current editing session. Use
!
to discard changes made
since the last save. If the editing session includes additional files
in the argument list that were never accessed, quit by typing
q!
or by typing
q
twice.
-
read
-
[address]
r
file
Copy in the text from
file
on the line below the specified
address
. If
file
is not specified, the current filename
is used.
:0r $HOME/data
Read file in at top of current file
-
read
-
[address]
r
!
command
Read the output of UNIX
command
into the text after the line
specified by
address
.
cal
|
:$r !cal
Place a calendar at end of file
|
-
source
-
so
file
Read and execute
ex
commands from
file
.
:so $HOME/.exrc
-
substitute
-
[address]
s
[
/
pattern
/
replacement
/
] [
options
] [
count
]
Replace first instance of
pattern
on each of the specified lines with
replacement
.
If
pattern
and
replacement
are omitted, repeat last substitution.
count
specifies the number of lines on which to substitute, starting
with
address
.
Options
-
c
-
Prompt for confirmation before each change.
-
g
-
Substitute all instances of
pattern
on each line.
-
p
-
Print the last line on which a substitution was made.
c
\U
|
:1,10s/yes/no/g
Substitute on first 10 lines
:%s/[Hh]ello/Hi/gc
Confirm global substitutions
:s/Fortran/\U&/ 3
Uppercase "Fortran" on next 3 lines
|
-
write
-
[address]
w
[
!
] [[
>>
]
file
]
Write lines specified by
address
to
file
,
or write full contents of buffer if
address
is not specified.
If
file
is also omitted, save the contents of the buffer
to the current filename.
If
>>
file
is used, write contents to the end of an existing
file
. The
!
flag forces the editor to write over any current
contents of
file
.
:1,10w name_list
Copy first 10 lines to
name_list
:50w >> name_list
Now append line 50
-
write
-
[address]
w
!
command
Write lines specified by
address
, or write full contents of buffer
if
address
is not specified, to the
standard input (
13.1
)
of
command
.
:1,10w !spell
Send first 10 lines to the
spell
command
:w !lpr
Print entire buffer with
lpr
command
|
|