ref: 76142255a117a21da665282e7c6754b8b389bbc7
dir: /sys/src/cmd/diff/test/diff-t11.expected/
--- diff-t11.1 +++ diff-t11.2 @@ -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 .