2016-10-09 23:14:54 +00:00
|
|
|
.Dd 2016-12-27
|
2015-12-14 12:09:34 +00:00
|
|
|
.Dt ED 1
|
|
|
|
.Os sbase
|
|
|
|
.Sh NAME
|
|
|
|
.Nm ed
|
|
|
|
.Nd text editor
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
.Nm
|
2016-10-09 23:14:54 +00:00
|
|
|
.Op Fl s
|
|
|
|
.Op Fl p Ar string
|
|
|
|
.Op Ar file
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
.Nm
|
|
|
|
is the standard text editor. It performs line-oriented operations on a buffer;
|
|
|
|
The buffer's contents are manipulated in command mode and text is written to the
|
|
|
|
buffer in input mode. Command mode is the default. To exit input mode enter a
|
|
|
|
dot ('.') on a line of its own.
|
|
|
|
.Pp
|
|
|
|
If
|
|
|
|
.Nm
|
|
|
|
is invoked with a file as an argument, it will simulate an edit command and read
|
|
|
|
the file's contents into a buffer. Changes to this buffer are local to
|
|
|
|
.Nm
|
|
|
|
until a write command is given.
|
|
|
|
.Pp
|
|
|
|
.Nm
|
|
|
|
uses the basic regular expression syntax and allows any character but space and
|
|
|
|
newline to be used as a delimiter in regular expressions.
|
|
|
|
.Sh OPTIONS
|
|
|
|
.Bl -tag -width Ds
|
|
|
|
.It Fl s
|
|
|
|
Suppress diagnostic messages
|
|
|
|
.It Fl p Ar string
|
|
|
|
Use
|
|
|
|
.Ar string
|
|
|
|
as a prompt when in command mode
|
|
|
|
.El
|
|
|
|
.Sh EXTENDED DESCRIPTION
|
|
|
|
.Ss Addresses
|
|
|
|
Commands operate on addresses. Addresses are used to refer to lines
|
|
|
|
within the buffer. Address ranges may have spaces before and after the separator.
|
|
|
|
Unless otherwise specified, 0 is an invalid address. The following symbols are
|
|
|
|
valid addresses:
|
|
|
|
.Bl -tag -width Ds
|
|
|
|
.It n
|
|
|
|
The nth line.
|
|
|
|
.It .
|
|
|
|
The current line, or "dot".
|
|
|
|
.It $
|
|
|
|
The last line.
|
|
|
|
.It +
|
|
|
|
The next line.
|
|
|
|
.It +n
|
|
|
|
The nth next line.
|
|
|
|
.It ^ or -
|
|
|
|
The previous line.
|
|
|
|
.It ^n or -n
|
|
|
|
The nth previous line.
|
|
|
|
.It x,y
|
|
|
|
The range of lines from x to y. The default value of x is 1, and the default
|
|
|
|
value of y is $.
|
|
|
|
.It x;y
|
|
|
|
As above, except that the current line is set to x. Omitting x in this case uses
|
|
|
|
the current line as the default value.
|
|
|
|
.It /re/
|
|
|
|
The next line matching re.
|
|
|
|
.It ?re?
|
|
|
|
The last line matching re.
|
|
|
|
.It 'c
|
|
|
|
The line marked by c. See k below.
|
|
|
|
.El
|
|
|
|
.Ss Commands.
|
|
|
|
.Nm
|
|
|
|
expects to see one command per line, with the following exception: commands may
|
|
|
|
be suffixed with either a list, number, or print command. These suffixed
|
|
|
|
commands are run after the command they're suffixed to has executed.
|
|
|
|
.Pp
|
|
|
|
The following is the list of commands that
|
|
|
|
.Nm
|
|
|
|
knows about. The parentheses contain the default addresses that a command uses.
|
|
|
|
.Bl -tag -width Ds
|
|
|
|
.It (.)a
|
|
|
|
Append text after the addressed line. The dot is set to the last line
|
|
|
|
entered. If no text was entered, the dot is set to the addressed line. An
|
|
|
|
address of 0 appends to the start of the buffer.
|
|
|
|
.It (.,.)c
|
|
|
|
Delete the addressed lines and then accept input to replace them. The dot
|
|
|
|
is set to the last line entered. If no text was entered, the dot is set to
|
|
|
|
the line before the deleted lines.
|
|
|
|
.It (.,.)d
|
|
|
|
Delete the addressed lines. If there is a line after the deleted range, the
|
|
|
|
dot is set to it. Otherwise, the dot is set to the line before the deleted range.
|
|
|
|
.It e Ar file
|
|
|
|
Delete the contents of the buffer and load in
|
|
|
|
.Ar file
|
|
|
|
for editing, printing the bytes read to standard output. If no filename is
|
|
|
|
given,
|
|
|
|
.Nm
|
|
|
|
uses the currently remembered filename. The remembered filename is set to
|
|
|
|
.Ar file
|
|
|
|
for later use.
|
|
|
|
.It E Ar file
|
|
|
|
As above, but without warning if the current buffer has unsaved changes.
|
|
|
|
.It f Ar file
|
|
|
|
Set the currently remembered filename to
|
|
|
|
.Ar
|
|
|
|
file
|
|
|
|
, or print the currently remembered filename if
|
|
|
|
.Ar
|
|
|
|
file is omitted.
|
|
|
|
.It (1,$)g/re/command
|
|
|
|
Apply command to lines matching re. The dot is set to the matching line before
|
|
|
|
command is executed. When each matching line has been operated on, the dot is
|
|
|
|
set to the last line operated on. If no lines match then the dot remains
|
|
|
|
unchanged. The command used may not be g, G, v, or V.
|
|
|
|
.It (1,$)G/re/
|
|
|
|
Interactively edit the range of line addresses that match re. The dot is set to
|
|
|
|
the matching line and printed before a command is input. When each matching line
|
|
|
|
has been operated on, the dot is set to the last line operated on. If no lines
|
|
|
|
match then the dot remains unchanged. The command used may not be a, c, i, g,
|
|
|
|
G, v, or V.
|
|
|
|
.It h
|
|
|
|
Print the reason for the most recent error.
|
|
|
|
.It H
|
|
|
|
Toggle error explanations. If on, the above behaviour is produced on all
|
|
|
|
subsequent errors.
|
|
|
|
.It (.)i
|
|
|
|
Insert text into the buffer before the addressed line. The dot is set to the
|
|
|
|
last line entered. If no text was entered, the dot is set to the addressed line
|
|
|
|
.It (.,.+1)j
|
|
|
|
Join two lines together. If only one address is given, nothing happens. The dot
|
|
|
|
is set to the newly joined line.
|
|
|
|
.It (.)kc
|
|
|
|
Mark the line with the lower case character c. The dot is unchanged.
|
|
|
|
.It (.,.)l
|
|
|
|
Unambiguously print the addressed lines. The dot is set to the last line written.
|
|
|
|
.It (.,.)m(.)
|
|
|
|
Move lines in the buffer to the line address on the right hand side. An address
|
|
|
|
of 0 on the right hand side moves to the start of the buffer. The dot is set to
|
|
|
|
the last line moved.
|
|
|
|
.It (.,.)n
|
|
|
|
Print the addressed lines and their numbers. The dot is set to the last line
|
|
|
|
printed.
|
|
|
|
.It (.,.)p
|
|
|
|
Print the addressed lines. The dot is set to the last line printed.
|
|
|
|
.It P
|
|
|
|
Toggle the prompt. Defaults to off, but is switched on if the -p flag is used.
|
|
|
|
.It q
|
|
|
|
Quit
|
|
|
|
.Nm
|
|
|
|
, warning if there are unsaved changes.
|
|
|
|
.It Q
|
|
|
|
As above, but without warning if the current buffer has unsaved changes.
|
|
|
|
.It ($)r Ar file
|
|
|
|
Read in
|
|
|
|
.Ar file
|
|
|
|
and append it to the current buffer, printing the bytes read to standard output.
|
|
|
|
The currently remembered filename isn't changed unless it's empty. An address of
|
|
|
|
0 reads the file into the start of the buffer.
|
|
|
|
.It (.,.)s/re/replacement/flags
|
|
|
|
Substitute re for replacement in lines matching re. An & within replacement is
|
|
|
|
replaced with the whole string matched by re. Backrefs can be used with the form
|
|
|
|
\\n, where n is a positive non-zero integer. When % is the only character in
|
|
|
|
replacement, it is substituted for the replacement string from the last
|
|
|
|
substitute command. If a newline is part of replacement then the matched string
|
|
|
|
is split into two lines; this cannot be done as part of a g or v command. If
|
|
|
|
flags contains an integer n, then the nth match is replaced. If flags contains
|
|
|
|
g, all matches are replaced. The dot is set to the last line matched.
|
|
|
|
.It (.,.)t(.)
|
|
|
|
As m, but copying instead of moving. The dot is set to the last line added.
|
|
|
|
.It u
|
|
|
|
Undo the last change. The dot is set to whatever it was before the undone
|
|
|
|
command was performed.
|
|
|
|
.It (1.$)v/re/command
|
|
|
|
As with g, but operating on lines that don't match re.
|
|
|
|
.It (1.$)V/re/
|
|
|
|
As with G, but operating on lines that don't match re.
|
|
|
|
.It (1,$)w Ar file
|
|
|
|
Write the addressed lines to
|
|
|
|
.Ar file
|
|
|
|
, overwriting its previous contents if the file exists, and print the number of
|
|
|
|
bytes written. If no filename is given the currently remembered filename will be
|
|
|
|
used instead. The dot is unchanged.
|
|
|
|
.It (1,$)W Ar file
|
|
|
|
As above, but instead of overwriting the contents of
|
|
|
|
.Ar file
|
|
|
|
the addressed lines are appended to
|
|
|
|
.Ar file
|
|
|
|
instead.
|
|
|
|
.It (.+1)\\n
|
|
|
|
Print the addressed line. Sets the dot to that line.
|
|
|
|
.It ($)=
|
|
|
|
Print the line number of the addressed line. The dot is unchanged.
|
|
|
|
.It &
|
|
|
|
Repeat the last command.
|
|
|
|
.It ! Ar command
|
|
|
|
Execute
|
|
|
|
.Ar command
|
|
|
|
using sh. If the first character of
|
|
|
|
.Ar command
|
|
|
|
is '!' then it is replaced with the text of the previous command. An unescaped %
|
|
|
|
is replaced with the currently remembered filename. ! does not process escape
|
|
|
|
characters. When
|
|
|
|
.Ar command
|
|
|
|
returns a '!' is printed. The dot is unchanged.
|
|
|
|
.El
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr sed 1 ,
|
|
|
|
.Xr regexp 3
|
|
|
|
.Sh STANDARDS
|
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
utility is compliant with the
|
|
|
|
.St -p1003.1-2013
|
|
|
|
specification, except where noted here:
|
|
|
|
g and v operate on single commands rather than lists delimited with '\\'.
|
|
|
|
e, E, r, w, and W commands cannot accept shell escapes.
|