ref: a0dc0a9b1b81655ba2e9fa87f74f07a4fcea825d
dir: /sys/src/cmd/diff/test/diff-t11.expected/
--- diff-t11.l
+++ diff-t11.r
@@ -1,1003 +1,908 @@
-.\" $OpenBSD: t11.1,v 1.2 2007/11/27 16:22:12 martynas Exp $
-.\" $NetBSD: ed.1,v 1.13 1995/03/21 09:04:38 cgd Exp $
+.\" $OpenBSD: t11.2,v 1.1 2003/07/21 20:16:21 otto Exp $
.\"
-.TH ED 1 "21 May 1993"
-.SH NAME
-.\" ed, red \- text editor
-ed \- text editor
-.SH SYNOPSIS
-ed [-] [-sx] [-p \fIstring\fR] [\fIfile\fR]
-.\" .LP
-.\" red [-] [-sx] [-p \fIstring\fR] [\fIfile\fR]
-.SH DESCRIPTION
-.B ed
+.Dd May 2, 1993
+.Dt ED 1
+.Os
+.Sh NAME
+.Nm ed
+.Nd text editor
+.Sh SYNOPSIS
+.Nm ed
+.Op Fl
+.Op Fl sx
+.Op Fl p Ar string
+.Op Ar file
+.Sh DESCRIPTION
+.Nm
is a line-oriented text editor.
-It is used to create, display, modify and otherwise manipulate text
-files.
-.\" .B red
-.\" is a restricted
-.\" .BR ed :
-.\" it can only edit files in the current
-.\" directory and cannot execute shell commands.
-
+It is used to create, display, modify, and otherwise manipulate text files.
If invoked with a
-.I file
+.Ar file
argument, then a copy of
-.I file
+.Ar file
is read into the editor's buffer.
Changes are made to this copy and not directly to
-.I file
+.Ar file
itself.
Upon quitting
-.BR ed ,
-any changes not explicitly saved with a
-.I `w'
+.Nm ed ,
+any changes not explicitly saved with a
+.Em w
command are lost.
-
+.Pp
Editing is done in two distinct modes:
-.I command
+.Em command
and
-.IR input .
+.Em input .
When first invoked,
-.B ed
+.Nm
is in command mode.
-In this mode commands are read from the standard input and
+In this mode, commands are read from the standard input and
executed to manipulate the contents of the editor buffer.
+.Pp
A typical command might look like:
-.sp
-.RS
-,s/\fIold\fR/\fInew\fR/g
-.RE
-.sp
+.Bd -literal -offset indent
+,s/old/new/g
+.Ed
+.Pp
which replaces all occurrences of the string
-.I old
+.Pa old
with
-.IR new .
-
+.Pa new .
+.Pp
When an input command, such as
-.I `a'
+.Em a
(append),
-.I `i'
-(insert) or
-.I `c'
-(change), is given,
-.B ed
-enters input mode. This is the primary means
-of adding text to a file.
+.Em i
+(insert),
+or
+.Em c
+(change) is given,
+.Nm
+enters input mode.
+This is the primary means of adding text to a file.
In this mode, no commands are available;
-instead, the standard input is written
-directly to the editor buffer. Lines consist of text up to and
-including a
-.IR newline
-character.
-Input mode is terminated by
-entering a single period (\fI.\fR) on a line.
-
+instead, the standard input is written directory to the editor buffer.
+Lines consist of text up to and including a newline character.
+Input mode is terminated by entering a single period
+.Pq Ql \&.
+on a line.
+.Pp
All
-.B ed
+.Nm
commands operate on whole lines or ranges of lines; e.g.,
the
-.I `d'
+.Em d
command deletes lines; the
-.I `m'
+.Em m
command moves lines, and so on.
It is possible to modify only a portion of a line by means of replacement,
-as in the example above. However even here, the
-.I `s'
+as in the example above.
+However, even here, the
+.Em s
command is applied to whole lines at a time.
-
+.Pp
In general,
-.B ed
+.Nm
commands consist of zero or more line addresses, followed by a single
character command and possibly additional parameters; i.e.,
commands have the structure:
-.sp
-.RS
-.I [address [,address]]command[parameters]
-.RE
-.sp
+.Bd -literal -offset indent
+[address [,address]]command[parameters]
+.Ed
+.Pp
The address(es) indicate the line or range of lines to be affected by the
-command. If fewer addresses are given than the command accepts, then
+command.
+If fewer addresses are given than the command accepts, then
default addresses are supplied.
-
-.SS OPTIONS
-.TP 8
--s
-Suppresses diagnostics. This should be used if
-.BR ed 's
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl
+Same as the
+.Fl s
+option (deprecated).
+.It Fl s
+Suppress diagnostics.
+This should be used if
+.Nm
standard input is from a script.
-
-.TP 8
--x
-Prompts for an encryption key to be used in subsequent reads and writes
+.Fl s
+flag.
+.It Fl x
+Prompt for an encryption key to be used in subsequent reads and writes
(see the
-.I `x'
+.Em x
command).
-
-.TP 8
-.RI \-p \ string
-Specifies a command prompt. This may be toggled on and off with the
-.I `P'
+.It Fl p Ar string
+Specifies a command prompt.
+This may be toggled on and off with the
+.Em P
command.
-
-.TP 8
-.I file
-Specifies the name of a file to read. If
-.I file
+.It Ar file
+Specifies the name of a file to read.
+If
+.Ar file
is prefixed with a
-bang (!), then it is interpreted as a shell command. In this case,
-what is read is
-the standard output of
-.I file
+bang
+.Pq Ql \&! ,
+then it is interpreted as a shell command.
+In this case, what is read is the standard output of
+.Ar file
executed via
-.IR sh (1).
+.Xr sh 1 .
To read a file whose name begins with a bang, prefix the
-name with a backslash (\\).
+name with a backslash
+.Pq Ql \e .
The default filename is set to
-.I file
+.Ar file
only if it is not prefixed with a bang.
-
-.SS LINE ADDRESSING
+.El
+.Ss LINE ADDRESSING
An address represents the number of a line in the buffer.
-.B ed
+.Nm
maintains a
-.I current address
-which is
-typically supplied to commands as the default address when none is specified.
-When a file is first read, the current address is set to the last line
-of the file. In general, the current address is set to the last line
-affected by a command.
-
+.Em current address
+which is typically supplied to commands as the default address
+when none is specified.
+When a file is first read, the current address is set to the last line
+of the file.
+In general, the current address is set to the last line affected by a command.
+.Pp
A line address is
constructed from one of the bases in the list below, optionally followed
-by a numeric offset. The offset may include any combination
-of digits, operators (i.e.,
-.IR + ,
-.I -
+by a numeric offset.
+The offset may include any combination of digits, operators (i.e.,
+.Em + ,
+.Em - ,
and
-.IR ^ )
+.Em ^ ) ,
and whitespace.
Addresses are read from left to right, and their values are computed
relative to the current address.
-
+.Pp
One exception to the rule that addresses represent line numbers is the
address
-.I 0
+.Em 0
(zero).
-This means "before the first line,"
+This means
+.Dq before the first line ,
and is legal wherever it makes sense.
-
-An address range is two addresses separated either by a comma or
-semi-colon. The value of the first address in a range cannot exceed the
-value of the second. If only one address is given in a range, then
-the second address is set to the given address. If an
-.IR n- tuple
+.Pp
+An address range is two addresses separated either by a comma or semi-colon.
+The value of the first address in a range cannot exceed the
+value of the second.
+If only one address is given in a range,
+then the second address is set to the given address.
+If an
+.Em n Ns No -tuple
of addresses is given where
-.I n > 2,
-then the corresponding range is determined by the last two addresses in
-the
-.IR n- tuple.
+.Em n > 2 ,
+then the corresponding range is determined by the last two addresses in the
+.Em n Ns No -tuple.
If only one address is expected, then the last address is used.
-
+.Pp
Each address in a comma-delimited range is interpreted relative to the
-current address. In a semi-colon-delimited range, the first address is
+current address.
+In a semi-colon-delimited range, the first address is
used to set the current address, and the second address is interpreted
relative to the first.
-
-
-The following address symbols are recognized.
-
-.TP 8
-\&.
+.Pp
+The following address symbols are recognized:
+.Bl -tag -width Ds
+.It Em \&.
The current line (address) in the buffer.
-
-.TP 8
-$
+.It Em $
The last line in the buffer.
-
-.TP 8
-n
+.It Em n
The
-.IR n th,
-line in the buffer
-where
-.I n
+.Em n Ns No th
+line in the buffer where
+.Em n
is a number in the range
-.I [0,$].
-
-.TP 8
-- or ^
+.Em [0,$] .
+.It Em - No or Em ^
The previous line.
This is equivalent to
-.I -1
+.Em -1
and may be repeated with cumulative effect.
-
-.TP 8
--\fIn\fR or ^\fIn\fR
+.It Em -n No or Em ^n
The
-.IR n th
+.Em n Ns No th
previous line, where
-.I n
+.Em n
is a non-negative number.
-
-.TP 8
-+
-The
-next line.
+.It Em +
+The next line.
This is equivalent to
-.I +1
+.Em +1
and may be repeated with cumulative effect.
-
-.TP 8
-+\fIn\fR or whitespace\fIn\fR
+.It Em +n
The
-.IR n th
+.Em n Ns No th
next line, where
-.I n
+.Em n
is a non-negative number.
-.I whitespace
-followed by a number
-.I n
-is interpreted as
-.IR +n .
-
-.TP 8
-, \fRor\fB %
-The first through last lines in the buffer. This is equivalent to
-the address range
-.I 1,$.
-
-.TP 8
-;
-The
-current through last lines in the buffer. This is equivalent to
-the address range
-.I .,$.
-
-.TP 8
-.RI / re/
-The
-next line containing the regular expression
-.IR re .
+.It Em \&, No or Em %
+The first through last lines in the buffer.
+This is equivalent to the address range
+.Em 1,$ .
+.It Em \&;
+The current through last lines in the buffer.
+This is equivalent to the address range
+.Em .,$ .
+.It Em / Ns No re Ns Em /
+The next line containing the regular expression
+.Em re .
The search wraps to the beginning of the buffer and continues down to the
current line, if necessary.
-// repeats the last search.
-
-.TP 8
-.RI ? re?
-The
-previous line containing the regular expression
-.IR re .
+.Em //
+repeats the last search.
+.It Em ? Ns No re Ns Em ?
+The previous line containing the regular expression
+.Em re .
The search wraps to the end of the buffer and continues up to the
current line, if necessary.
-?? repeats the last search.
-
-.TP 8
-.RI \' lc
-The
-line previously marked by a
-.I `k'
+.Em ??
+repeats the last search.
+.It Em \&\' Ns No lc
+The line previously marked by a
+.Em k
(mark) command, where
-.I lc
+.Em lc
is a lower case letter.
-
-.SS REGULAR EXPRESSIONS
+.El
+.Ss REGULAR EXPRESSIONS
Regular expressions are patterns used in selecting text.
For example, the
-.B ed
+.Nm
command
-.sp
-.RS
-g/\fIstring\fR/
-.RE
-.sp
+.Bd -literal -offset indent
+g/string/
+.Ed
+.Pp
prints all lines containing
-.IR string .
-Regular expressions are also
-used by the
-.I `s'
+.Em string .
+Regular expressions are also used by the
+.Em s
command for selecting old text to be replaced with new.
-
+.Pp
In addition to a specifying string literals, regular expressions can
-represent
-classes of strings. Strings thus represented are said to be matched
-by the corresponding regular expression.
-If it is possible for a regular expression
-to match several strings in a line, then the left-most longest match is
-the one selected.
-
+represent classes of strings.
+Strings thus represented are said to be matched by the
+corresponding regular expression.
+If it is possible for a regular expression to match several strings in
+a line, then the leftmost longest match is the one selected.
+.Pp
The following symbols are used in constructing regular expressions:
-
-.TP 8
-c
+.Bl -tag -width Dsasdfsd
+.It Em c
Any character
-.I c
-not listed below, including `{', '}', `(', `)', `<' and `>',
+.Em c
+not listed below, including
+.Em { Ns No ,
+.Em } Ns No ,
+.Em \&( Ns No ,
+.Em \&) Ns No ,
+.Em < Ns No ,
+and
+.Em >
matches itself.
-
-.TP 8
-\fR\e\fIc\fR
+.It Em \ec
Any backslash-escaped character
-.IR c ,
-except for `{', '}', `(', `)', `<' and `>',
+.Em c Ns No ,
+except for
+.Em { Ns No ,
+.Em } Ns No ,
+.Em \&( Ns No ,
+.Em \&) Ns No ,
+.Em < Ns No , and
+.Em >
matches itself.
-
-.TP 8
-\fR.\fR
+.It Em \&.
Matches any single character.
-
-.TP 8
-.I [char-class]
+.It Em [char-class]
Matches any single character in
-.IR char-class .
-To include a `]'
+.Em char-class .
+To include a
+.Ql \&]
in
-.IR char-class ,
+.Em char-class Ns No ,
it must be the first character.
A range of characters may be specified by separating the end characters
-of the range with a `-', e.g., `a-z' specifies the lower case characters.
+of the range with a
+.Ql - ;
+e.g.,
+.Em a-z
+specifies the lower case characters.
The following literal expressions can also be used in
-.I char-class
+.Em char-class
to specify sets of characters:
-.sp
-\ \ [:alnum:]\ \ [:cntrl:]\ \ [:lower:]\ \ [:space:]
-.PD 0
-\ \ [:alpha:]\ \ [:digit:]\ \ [:print:]\ \ [:upper:]
-.PD 0
-\ \ [:blank:]\ \ [:graph:]\ \ [:punct:]\ \ [:xdigit:]
-.sp
-If `-' appears as the first or last
-character of
-.IR char-class ,
+.Pp
+.Em \ \ [:alnum:]\ \ [:cntrl:]\ \ [:lower:]\ \ [:space:]
+.Em \ \ [:alpha:]\ \ [:digit:]\ \ [:print:]\ \ [:upper:]
+.Em \ \ [:blank:]\ \ [:graph:]\ \ [:punct:]\ \ [:xdigit:]
+.Pp
+If
+.Ql -
+appears as the first or last character of
+.Em char-class Ns No ,
then it matches itself.
All other characters in
-.I char-class
+.Em char-class
match themselves.
-.sp
+.Pp
Patterns in
-.I char-class
-of the form:
-.sp
-\ \ [.\fIcol-elm\fR.] or,
-.PD 0
-\ \ [=\fIcol-elm\fR=]
-.sp
+.Em char-class
+of the form
+.Em [.col-elm.] No or Em [=col-elm=]
where
-.I col-elm
-is a
-.I collating element
-are interpreted according to
-.IR locale (5)
+.Em col-elm
+is a collating element are interpreted according to
+.Xr locale 5
(not currently supported).
See
-.IR regex (3)
+.Xr regex 3
for an explanation of these constructs.
-
-.TP 8
-[^\fIchar-class\fR]
+.It Em [^char-class]
Matches any single character, other than newline, not in
-.IR char-class .
-.IR char-class
-is defined
-as above.
-
-.TP 8
-^
-If `^' is the first character of a regular expression, then it
+.Em char-class Ns No .
+.Em char-class
+is defined as above.
+.It Em ^
+If
+.Em ^
+is the first character of a regular expression, then it
anchors the regular expression to the beginning of a line.
Otherwise, it matches itself.
-
-.TP 8
-$
-If `$' is the last character of a regular expression, it
-anchors the regular expression to the end of a line.
+.It Em $
+If
+.Em $
+is the last character of a regular expression,
+it anchors the regular expression to the end of a line.
Otherwise, it matches itself.
-
-.TP 8
-\fR\e<\fR
+.It Em \e<
Anchors the single character regular expression or subexpression
immediately following it to the beginning of a word.
-(This may not be available)
-
-.TP 8
-\fR\e>\fR
+(This may not be available.)
+.It Em \e>
Anchors the single character regular expression or subexpression
immediately following it to the end of a word.
-(This may not be available)
-
-.TP 8
-\fR\e(\fIre\fR\e)\fR
+(This may not be available.)
+.It Em \e( Ns No re Ns Em \e)
Defines a subexpression
-.IR re .
+.Em re .
Subexpressions may be nested.
-A subsequent backreference of the form \fI`\en'\fR, where
-.I n
+A subsequent backreference of the form
+.Em \en Ns No ,
+where
+.Em n
is a number in the range [1,9], expands to the text matched by the
-.IR n th
+.Em n Ns No th
subexpression.
-For example, the regular expression `\e(.*\e)\e1' matches any string
-consisting of identical adjacent substrings.
-Subexpressions are ordered relative to
-their left delimiter.
-
-.TP 8
-*
+For example, the regular expression
+.Em \e(.*\e)\e1
+matches any string consisting of identical adjacent substrings.
+Subexpressions are ordered relative to their left delimiter.
+.It Em *
Matches the single character regular expression or subexpression
-immediately preceding it zero or more times. If '*' is the first
-character of a regular expression or subexpression, then it matches
-itself. The `*' operator sometimes yields unexpected results.
-For example, the regular expression `b*' matches the beginning of
-the string `abbb' (as opposed to the substring `bbb'), since a null match
-is the only left-most match.
-
-.TP 8
-\fR\e{\fIn,m\fR\e}\fR or \fR\e{\fIn,\fR\e}\fR or \fR\e{\fIn\fR\e}\fR
+immediately preceding it zero or more times.
+If
+.Em *
+is the first character of a regular expression or subexpression,
+then it matches itself.
+The
+.Em *
+operator sometimes yields unexpected results.
+For example, the regular expression
+.Em b*
+matches the beginning of the string
+.Em abbb
+(as opposed to the substring
+.Em bbb Ns No ),
+since a null match is the only leftmost match.
+.Sm off
+.It Xo Em \e{ No n,m
+.Em \e}\ \e{ No n, Em \e}\
+.Em \e{ No n Em \e}
+.Xc
+.Sm on
Matches the single character regular expression or subexpression
immediately preceding it at least
-.I n
+.Em n
and at most
-.I m
+.Em m
times.
If
-.I m
+.Em m
is omitted, then it matches at least
-.I n
+.Em n
times.
If the comma is also omitted, then it matches exactly
-.I n
+.Em n
times.
-
-.LP
+.El
+.Pp
Additional regular expression operators may be defined depending on the
particular
-.IR regex (3)
+.Xr regex 3
implementation.
-
-.SS COMMANDS
+.Ss COMMANDS
All
-.B ed
-commands are single characters, though some require additonal parameters.
+.Nm
+commands are single characters, though some require additional parameters.
If a command's parameters extend over several lines, then
-each line except for the last
-must be terminated with a backslash (\\).
-
+each line except for the last must be terminated with a backslash
+.Pq Ql \e .
+.Pp
In general, at most one command is allowed per line.
However, most commands accept a print suffix, which is any of
-.I `p'
-(print),
-.I `l'
-(list) ,
+.Em p No (print),
+.Em l No (list),
or
-.I `n'
-(enumerate),
+.Em n No (enumerate),
to print the last line affected by the command.
-
+.Pp
An interrupt (typically ^C) has the effect of aborting the current command
and returning the editor to command mode.
-
-.B ed
-recognizes the following commands. The commands are shown together with
+.Pp
+.Nm
+recognizes the following commands.
+The commands are shown together with
the default address or address range supplied if none is
-specified (in parenthesis).
-
-.TP 8
-(.)a
+specified (in parentheses), and other possible arguments on the right.
+.Bl -tag -width Dxxs
+.It (.) Ns Em a
Appends text to the buffer after the addressed line.
Text is entered in input mode.
The current address is set to last line entered.
-
-.TP 8
-(.,.)c
-Changes lines in the buffer. The addressed lines are deleted
-from the buffer, and text is appended in their place.
+.It (.,.) Ns Em c
+Changes lines in the buffer.
+The addressed lines are deleted from the buffer,
+and text is appended in their place.
Text is entered in input mode.
The current address is set to last line entered.
-
-.TP 8
-(.,.)d
+.It (.,.) Ns Em d
Deletes the addressed lines from the buffer.
If there is a line after the deleted range, then the current address is set
-to this line. Otherwise the current address is set to the line
-before the deleted range.
-
-.TP 8
-.RI e \ file
+to this line.
+Otherwise the current address is set to the line before the deleted range.
+.It Em e No file
Edits
-.IR file ,
+.Em file Ns No ,
and sets the default filename.
If
-.I file
-is not specified, then the default filename is used.
-Any lines in the buffer are deleted before
-the new file is read.
+.Em file
+is not specified, then the default filename is used.
+Any lines in the buffer are deleted before the new file is read.
The current address is set to the last line read.
-
-.TP 8
-.RI e \ !command
+.It Em e No !command
Edits the standard output of
-.IR `!command' ,
+.Em !command Ns No ,
(see
-.RI ! command
+.Em ! No command
below).
The default filename is unchanged.
Any lines in the buffer are deleted before the output of
-.I command
+.Em command
is read.
The current address is set to the last line read.
-
-.TP 8
-.RI E \ file
+.It Em E No file
Edits
-.I file
+.Em file
unconditionally.
This is similar to the
-.I e
-command,
-except that unwritten changes are discarded without warning.
+.Em e
+command, except that unwritten changes are discarded without warning.
The current address is set to the last line read.
-
-.TP 8
-.RI f \ file
+.It Em f No file
Sets the default filename to
-.IR file .
+.Em file Ns No .
If
-.I file
+.Em file
is not specified, then the default unescaped filename is printed.
-
-.TP 8
-.RI (1,$)g /re/command-list
+.It (1,$) Ns Em g Ns No /re/command-list
Applies
-.I command-list
+.Em command-list
to each of the addressed lines matching a regular expression
-.IR re .
-The current address is set to the
-line currently matched before
-.I command-list
+.Em re Ns No .
+The current address is set to the line currently matched before
+.Em command-list
is executed.
At the end of the
-.I `g'
+.Em g
command, the current address is set to the last line affected by
-.IR command-list .
-
+.Em command-list Ns No .
+.Pp
Each command in
-.I command-list
+.Em command-list
must be on a separate line,
-and every line except for the last must be terminated by a backslash
-(\\).
+and every line except for the last must be terminated by
+.Em \e No (backslash).
Any commands are allowed, except for
-.IR `g' ,
-.IR `G' ,
-.IR `v' ,
+.Em g Ns No ,
+.Em G Ns No ,
+.Em v Ns No ,
and
-.IR `V' .
+.Em V Ns No .
A newline alone in
-.I command-list
-is equivalent to a
-.I `p'
+.Em command-list
+is equivalent to a
+.Em p
command.
-
-.TP 8
-.RI (1,$)G /re/
+.It (1,$) Ns Em G Ns No /re/
Interactively edits the addressed lines matching a regular expression
-.IR re.
-For each matching line,
-the line is printed,
-the current address is set,
-and the user is prompted to enter a
-.IR command-list .
+.Em re Ns No .
+For each matching line, the line is printed, the current address is set,
+and the user is prompted to enter a
+.Em command-list Ns No .
At the end of the
-.I `G'
-command, the current address
-is set to the last line affected by (the last)
-.IR command-list .
-
+.Em g
+command, the current address is set to the last line affected by (the last)
+.Em command-list Ns No .
+.Pp
The format of
-.I command-list
+.Em command-list
is the same as that of the
-.I `g'
-command. A newline alone acts as a null command list.
-A single `&' repeats the last non-null command list.
-
-.TP 8
-H
+.Em g
+command.
+A newline alone acts as a null command list.
+A single
+.Em &
+repeats the last non-null command list.
+.It Em H
Toggles the printing of error explanations.
By default, explanations are not printed.
-It is recommended that ed scripts begin with this command to
-aid in debugging.
-
-.TP 8
-h
+It is recommended that
+.Nm
+scripts begin with this command to aid in debugging.
+.It Em h
Prints an explanation of the last error.
-
-.TP 8
-(.)i
+.It (.) Ns Em i
Inserts text in the buffer before the current line.
Text is entered in input mode.
The current address is set to the last line entered.
-
-.TP 8
-(.,.+1)j
-Joins the addressed lines. The addressed lines are
-deleted from the buffer and replaced by a single
+.It (.,.+1) Ns Em j
+Joins the addressed lines.
+The addressed lines are deleted from the buffer and replaced by a single
line containing their joined text.
The current address is set to the resultant line.
-
-.TP 8
-.RI (.)k lc
+.It (.) Ns Em klc
Marks a line with a lower case letter
-.IR lc .
-The line can then be addressed as
-.I 'lc
+.Em lc Ns No \&.
+The line can then be addressed as
+.Em \&'lc
(i.e., a single quote followed by
-.I lc
-) in subsequent commands. The mark is not cleared until the line is
-deleted or otherwise modified.
-
-.TP 8
-(.,.)l
+.Em lc Ns No )
+in subsequent commands.
+The mark is not cleared until the line is deleted or otherwise modified.
+.It (.,.) Ns Em l
Prints the addressed lines unambiguously.
-If a single line fills for than one screen (as might be the case
-when viewing a binary file, for instance), a `--More--'
-prompt is printed on the last line.
-.B ed
-waits until the RETURN key is pressed
-before displaying the next screen.
-The current address is set to the last line
-printed.
-
-.TP 8
-(.,.)m(.)
-Moves lines in the buffer. The addressed lines are moved to after the
+If a single line fills more than one screen (as might be the case
+when viewing a binary file, for instance), a
+.Dq --More--
+prompt is printed on the last line.
+.Nm
+waits until the RETURN key is pressed before displaying the next screen.
+The current address is set to the last line printed.
+.It (.,.) Ns Em m Ns No (.)
+Moves lines in the buffer.
+The addressed lines are moved to after the
right-hand destination address, which may be the address
-.IR 0
+.Em 0
(zero).
-The current address is set to the
-last line moved.
-
-.TP 8
-(.,.)n
-Prints the addressed lines along with
-their line numbers. The current address is set to the last line
-printed.
-
-.TP 8
-(.,.)p
-Prints the addressed lines. The current address is set to the last line
-printed.
-
-.TP 8
-P
+The current address is set to the last line moved.
+.It (.,.) Ns Em n
+Prints the addressed lines along with their line numbers.
+The current address is set to the last line printed.
+.It (.,.) Ns Em p
+Prints the addressed lines.
+The current address is set to the last line printed.
+.It Em P
Toggles the command prompt on and off.
Unless a prompt was specified by with command-line option
-\fI-p string\fR, the command prompt is by default turned off.
-
-.TP 8
-q
-Quits ed.
-
-.TP 8
-Q
-Quits ed unconditionally.
+.Fl p Ar string Ns No ,
+the command prompt is by default turned off.
+.It Em q
+Quits
+.Nm ed .
+.It Em Q
+Quits
+.Nm
+unconditionally.
This is similar to the
-.I q
-command,
-except that unwritten changes are discarded without warning.
-
-.TP 8
-.RI ($)r \ file
+.Em q
+command, except that unwritten changes are discarded without warning.
+.It ($) Ns Em r No file
Reads
-.I file
-to after the addressed line. If
-.I file
-is not specified, then the default
-filename is used. If there was no default filename prior to the command,
+.Em file
+to after the addressed line.
+If
+.Em file
+is not specified, then the default filename is used.
+If there was no default filename prior to the command,
then the default filename is set to
-.IR file .
+.Em file Ns No .
Otherwise, the default filename is unchanged.
The current address is set to the last line read.
-
-.TP 8
-.RI ($)r \ !command
-Reads
-to after the addressed line
-the standard output of
-.IR `!command' ,
+.It ($) Ns Em r No !command
+Reads to after the addressed line the standard output of
+.Em !command Ns No ,
(see the
-.RI ! command
-below).
+.Em !
+command below).
The default filename is unchanged.
The current address is set to the last line read.
-
-.HP
-.RI (.,.)s /re/replacement/
-.PD 0
-.HP
-.RI (.,.)s /re/replacement/\fRg\fR
-.HP
-.RI (.,.)s /re/replacement/n
-.br
-Replaces text in the addressed lines
-matching a regular expression
-.I re
+.Sm off
+.It Xo (.,.) Em s No /re/replacement/ , \ (.,.)
+.Em s No /re/replacement/ Em g , No \ (.,.)
+.Em s No /re/replacement/ Em n
+.Xc
+.Sm on
+Replaces text in the addressed lines matching a regular expression
+.Em re
with
-.IR replacement .
+.Em replacement Ns No .
By default, only the first match in each line is replaced.
If the
-.I `g'
+.Em g
(global) suffix is given, then every match to be replaced.
The
-.I `n'
+.Em n
suffix, where
-.I n
-is a postive number, causes only the
-.IR n th
+.Em n
+is a positive number, causes only the
+.Em n Ns No th
match to be replaced.
It is an error if no substitutions are performed on any of the addressed
lines.
The current address is set the last line affected.
-
-.I re
+.Pp
+.Em re
and
-.I replacement
+.Em replacement
may be delimited by any character other than space and newline
(see the
-.I `s'
+.Em s
command below).
If one or two of the last delimiters is omitted, then the last line
affected is printed as though the print suffix
-.I `p'
+.Em p
were specified.
-
-
-An unescaped `&' in
-.I replacement
+.Pp
+An unescaped
+.Ql \e
+in
+.Em replacement
is replaced by the currently matched text.
The character sequence
-\fI`\em'\fR,
+.Em \em Ns No ,
where
-.I m
+.Em m
is a number in the range [1,9], is replaced by the
-.IR m th
+.Em m Ns No th
backreference expression of the matched text.
If
-.I replacement
-consists of a single `%', then
-.I replacement
+.Em replacement
+consists of a single
+.Ql % ,
+then
+.Em replacement
from the last substitution is used.
Newlines may be embedded in
-.I replacement
-if they are escaped with a backslash (\\).
-
-.TP 8
-(.,.)s
+.Em replacement
+if they are escaped with a backslash
+.Pq Ql \e .
+.It (.,.) Ns Em s
Repeats the last substitution.
This form of the
-.I `s'
+.Em s
command accepts a count suffix
-.IR `n' ,
+.Em n Ns No ,
or any combination of the characters
-.IR `r' ,
-.IR `g' ,
+.Em r Ns No ,
+.Em g Ns No ,
and
-.IR `p' .
+.Em p Ns No .
If a count suffix
-.I `n'
+.Em n
is given, then only the
-.IR n th
+.Em n Ns No th
match is replaced.
The
-.I `r'
+.Em r
suffix causes
the regular expression of the last search to be used instead of the
that of the last substitution.
The
-.I `g'
+.Em g
suffix toggles the global suffix of the last substitution.
The
-.I `p'
+.Em p
suffix toggles the print suffix of the last substitution
The current address is set to the last line affected.
-
-.TP 8
-(.,.)t(.)
+.It (.,.) Ns Em t Ns No (.)
Copies (i.e., transfers) the addressed lines to after the right-hand
destination address, which may be the address
-.IR 0
+.Em 0
(zero).
-The current address is set to the last line
-copied.
-
-.TP 8
-u
+The current address is set to the last line copied.
+.It Em u
Undoes the last command and restores the current address
to what it was before the command.
The global commands
-.IR `g' ,
-.IR `G' ,
-.IR `v' ,
+.Em g Ns No ,
+.Em G Ns No ,
+.Em v Ns No ,
and
-.IR `V' .
+.Em V Ns No .
are treated as a single command by undo.
-.I `u'
+.Em u
is its own inverse.
-
-.TP 8
-.RI (1,$)v /pat/command-list
+.It (1,$) Ns Em v Ns No /re/command-list
Applies
-.I command-list
+.Em command-list
to each of the addressed lines not matching a regular expression
-.IR re .
+.Em re Ns No .
This is similar to the
-.I `g'
+.Em g
command.
-
-.TP 8
-.RI (1,$)V /re/
+.It (1,$) Ns Em V Ns No /re/
Interactively edits the addressed lines not matching a regular expression
-.IR re.
+.Em re Ns No .
This is similar to the
-.I `G'
+.Em G
command.
-
-.TP 8
-.RI (1,$)w \ file
+.It (1,$) Ns Em w No file
Writes the addressed lines to
-.IR file .
+.Em file Ns No .
Any previous contents of
-.I file
+.Em file
is lost without warning.
If there is no default filename, then the default filename is set to
-.IR file,
-otherwise it is unchanged. If no filename is specified, then the default
-filename is used.
+.Em file Ns No ,
+otherwise it is unchanged.
+If no filename is specified, then the default filename is used.
The current address is unchanged.
-
-.TP 8
-.RI (1,$)wq \ file
+.It (1,$) Ns Em wq No file
Writes the addressed lines to
-.IR file ,
+.Em file Ns No ,
and then executes a
-.I `q'
+.Em q
command.
-
-.TP 8
-.RI (1,$)w \ !command
+.It (1,$) Ns Em w No !command
Writes the addressed lines to the standard input of
-.IR `!command' ,
+.Em !command Ns No ,
(see the
-.RI ! command
-below).
+.Em !
+command below).
The default filename and current address are unchanged.
-
-.TP 8
-.RI (1,$)W \ file
+.It (1,$) Ns Em W No file
Appends the addressed lines to the end of
-.IR file .
+.Em file Ns No .
This is similar to the
-.I `w'
+.Em w
command, expect that the previous contents of file is not clobbered.
The current address is unchanged.
-
-.TP 8
-x
-Prompts for an encryption key which is used in subsequent reads and
-writes. If a newline alone is entered as the key, then encryption is
-turned off. Otherwise, echoing is disabled while a key is read.
-Encryption/decryption is done using the bdes(1) algorithm.
-
-.TP 8
-.RI (.+1)z n
+.It Em x
+Prompts for an encryption key which is used in subsequent reads and writes.
+If a newline alone is entered as the key, then encryption is turned off.
+Otherwise, echoing is disabled while a key is read.
+Encryption/decryption is done using the
+.Xr bdes 1
+algorithm.
+.It (.+1) Ns Em z Ns No n
Scrolls
-.I n
-lines at a time starting at addressed line. If
-.I n
+.Em n
+lines at a time starting at addressed line.
+If
+.Em n
is not specified, then the current window size is used.
The current address is set to the last line printed.
-
-.TP 8
-.RI ! command
+.It ($) Ns Em =
+Prints the line number of the addressed line.
+.It (.+1) Ns Em newline
+Prints the addressed line, and sets the current address to that line.
+.It Em ! Ns No command
Executes
-.I command
+.Em command
via
-.IR sh (1).
+.Xr sh 1 .
If the first character of
-.I command
-is `!', then it is replaced by text of the
-previous
-.IR `!command' .
-.B ed
+.Em command
+is
+.Em ! Ns No ,
+then it is replaced by text of the previous
+.Em !command Ns No .
+.Nm
does not process
-.I command
-for backslash (\\) escapes.
+.Em command
+for
+.Em \e
+(backslash) escapes.
However, an unescaped
-.I `%'
+.Em %
is replaced by the default filename.
-When the shell returns from execution, a `!'
+When the shell returns from execution, a
+.Em !
is printed to the standard output.
The current line is unchanged.
-
-.TP 8
-($)=
-Prints the line number of the addressed line.
-
-.TP 8
-(.+1)newline
-Prints the addressed line, and sets the current address to
-that line.
-
-.SH FILES
-.TP 20
-/tmp/ed.*
-Buffer file
-.PD 0
-.TP 20
-ed.hup
-The file to which
-.B ed
-attempts to write the buffer if the terminal hangs up.
-
-.SH SEE ALSO
-
-.IR vi (1),
-.IR sed (1),
-.IR regex (3),
-.IR bdes (1),
-.IR sh (1).
-
-USD:12-13
-
-B. W. Kernighan and P. J. Plauger,
-.I Software Tools in Pascal ,
-Addison-Wesley, 1981.
-
-.SH LIMITATIONS
-.B ed
+.El
+.Sh LIMITATIONS
+.Nm
processes
-.I file
-arguments for backslash escapes, i.e., in a filename,
-any characters preceded by a backslash (\\) are
-interpreted literally.
-
+.Em file
+arguments for backslash escapes, i.e., in a filename,
+any characters preceded by a backslash
+.Pq Ql \e
+are interpreted literally.
+.Pp
If a text (non-binary) file is not terminated by a newline character,
then
-.B ed
-appends one on reading/writing it. In the case of a binary file,
-.B ed
+.Nm
+appends one on reading/writing it.
+In the case of a binary file,
+.Nm
does not append a newline on reading/writing.
-
-per line overhead: 4 ints
-
-.SH DIAGNOSTICS
+.Sh DIAGNOSTICS
When an error occurs,
-.B ed
-prints a `?' and either returns to command mode
-or exits if its input is from a script.
-An explanation of the last error can be
-printed with the
-.I `h'
+.Nm
+prints a
+.Dq ?
+and either returns to command mode or exits if its input is from a script.
+An explanation of the last error can be printed with the
+.Em h
(help) command.
-
-Since the
-.I `g'
-(global) command masks any errors from failed searches and substitutions,
+.Pp
+Since the
+.Em g
+(global) command masks any errors from failed searches and substitutions,
it can be used to perform conditional operations in scripts; e.g.,
-.sp
-.RS
-g/\fIold\fR/s//\fInew\fR/
-.RE
-.sp
+.Bd -literal -offset indent
+g/old/s//new/
+.Ed
+.Pp
replaces any occurrences of
-.I old
+.Em old
with
-.IR new .
+.Em new Ns No .
+.Pp
If the
-.I `u'
+.Em u
(undo) command occurs in a global command list, then
the command list is executed only once.
-
+.Pp
If diagnostics are not disabled, attempting to quit
-.B ed
-or edit another file before writing a modified buffer
-results in an error.
+.Nm
+or edit another file before writing a modified buffer results in an error.
If the command is entered a second time, it succeeds,
but any changes to the buffer are lost.
+.Sh FILES
+.Bl -tag -width /tmp/ed.* -compact
+.It Pa /tmp/ed.*
+buffer file
+.It Pa ed.hup
+where
+.Nm
+attempts to write the buffer if the terminal hangs up
+.El
+.Sh SEE ALSO
+.Xr bdes 1 ,
+.Xr sed 1 ,
+.Xr sh 1 ,
+.Xr vi 1 ,
+.Xr regex 3
+.Pp
+USD:12-13
+.Rs
+.%A B. W. Kernighan
+.%A P. J. Plauger
+.%B Software Tools in Pascal
+.%O Addison-Wesley
+.%D 1981
+.Re
+.Sh HISTORY
+An
+.Nm
+command appeared in
+.At v1 .