123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683 |
- .TH ED 1
- .SH NAME
- ed \- text editor
- .SH SYNOPSIS
- .B ed
- [
- .B -
- ]
- [
- .B -o
- ]
- [
- .I file
- ]
- .SH DESCRIPTION
- .I Ed
- is a venerable text editor.
- .PP
- If a
- .I file
- argument is given,
- .I ed
- simulates an
- .L e
- command (see below) on that file:
- it is read into
- .I ed's
- buffer so that it can be edited.
- The options are
- .TP
- .B -
- Suppress the printing
- of character counts by
- .LR e ,
- .LR r ,
- and
- .L w
- commands and of the confirming
- .L !
- by
- .L !
- commands.
- .TP
- .B -o
- (for output piping)
- Write all output to the standard error file except writing by
- .L w
- commands.
- If no
- .I file
- is given, make
- .B /fd/1
- the remembered file; see the
- .L e
- command below.
- .PP
- .I Ed
- operates on a `buffer', a copy of the file it is editing;
- changes made
- in the buffer have no effect on the file until a
- .L w
- (write)
- command is given.
- The copy of the text being edited resides
- in a temporary file called the
- .IR buffer .
- .PP
- Commands to
- .I ed
- have a simple and regular structure: zero, one, or
- two
- .I addresses
- followed by a single character
- .IR command ,
- possibly
- followed by parameters to the command.
- These addresses specify one or more lines in the buffer.
- Missing addresses are supplied by default.
- .PP
- In general, only one command may appear on a line.
- Certain commands allow the
- addition of text to the buffer.
- While
- .I ed
- is accepting text, it is said
- to be in
- .I "input mode."
- In this mode, no commands are recognized;
- all input is merely collected.
- Input mode is left by typing a period
- .L .
- alone at the
- beginning of a line.
- .PP
- .I Ed
- supports the
- .I "regular expression"
- notation described in
- .IR regexp (6).
- Regular expressions are used in addresses to specify
- lines and in one command
- (see
- .I s
- below)
- to specify a portion of a line which is to be replaced.
- If it is desired to use one of
- the regular expression metacharacters as an ordinary
- character, that character may be preceded by
- .RB ` \e '.
- This also applies to the character bounding the regular
- expression (often
- .LR / )
- and to
- .L \e
- itself.
- .PP
- To understand addressing in
- .I ed
- it is necessary to know that at any time there is a
- .I "current line."
- Generally, the current line is
- the last line affected by a command; however,
- the exact effect on the current line
- is discussed under the description of
- each command.
- Addresses are constructed as follows.
- .TP
- 1.
- The character
- .LR . ,
- customarily called `dot',
- addresses the current line.
- .TP
- 2.
- The character
- .L $
- addresses the last line of the buffer.
- .TP
- 3.
- A decimal number
- .I n
- addresses the
- .IR n -th
- line of the buffer.
- .TP
- 4.
- .BI \'x
- addresses the line marked with the name
- .IR x ,
- which must be a lower-case letter.
- Lines are marked with the
- .L k
- command.
- .TP
- 5.
- A regular expression enclosed in slashes (
- .LR / )
- addresses
- the line found by searching forward from the current line
- and stopping at the first line containing a
- string that matches the regular expression.
- If necessary the search wraps around to the beginning of the
- buffer.
- .TP
- 6.
- A regular expression enclosed in queries
- .L ?
- addresses
- the line found by searching backward from the current line
- and stopping at the first line containing
- a string that matches the regular expression.
- If necessary
- the search wraps around to the end of the buffer.
- .TP
- 7.
- An address followed by a plus sign
- .L +
- or a minus sign
- .L -
- followed by a decimal number specifies that address plus
- (resp. minus) the indicated number of lines.
- The plus sign may be omitted.
- .TP
- 8.
- An address followed by
- .L +
- (or
- .LR - )
- followed by a
- regular expression enclosed in slashes specifies the first
- matching line following (or preceding) that address.
- The search wraps around if necessary.
- The
- .L +
- may be omitted, so
- .L 0/x/
- addresses the
- .I first
- line in the buffer with an
- .LR x .
- Enclosing the regular expression in
- .L ?
- reverses the search direction.
- .TP
- 9.
- If an address begins with
- .L +
- or
- .L -
- the addition or subtraction is taken with respect to the current line;
- e.g.\&
- .L -5
- is understood to mean
- .LR .-5 .
- .TP
- 10.
- If an address ends with
- .L +
- or
- .LR - ,
- then 1 is added (resp. subtracted).
- As a consequence of this rule and rule 9,
- the address
- .L -
- refers to the line before the current line.
- Moreover,
- trailing
- .L +
- and
- .L -
- characters
- have cumulative effect, so
- .L --
- refers to the current
- line less 2.
- .TP
- 11.
- To maintain compatibility with earlier versions of the editor,
- the character
- .L ^
- in addresses is
- equivalent to
- .LR - .
- .PP
- Commands may require zero, one, or two addresses.
- Commands which require no addresses regard the presence
- of an address as an error.
- Commands which accept one or two addresses
- assume default addresses when insufficient are given.
- If more addresses are given than a command requires,
- the last one or two (depending on what is accepted) are used.
- .PP
- Addresses are separated from each other typically by a comma
- .LR , .
- They may also be separated by a semicolon
- .LR ; .
- In this case the current line
- is set to
- the previous address before the next address is interpreted.
- If no address precedes a comma or semicolon, line 1 is assumed;
- if no address follows, the last line of the buffer is assumed.
- The second address of any two-address sequence
- must correspond to a line following the line corresponding to the first address.
- .PP
- In the following list of
- .I ed
- commands, the default addresses
- are shown in parentheses.
- The parentheses are not part of
- the address, but are used to show that the given addresses are
- the default.
- `Dot' means the current line.
- .TP
- .RB (\|\fL.\fP\|) \|a
- .br
- .ns
- .TP
- <text>
- .br
- .ns
- .TP
- .B .
- Read the given text
- and append it after the addressed line.
- Dot is left
- on the last line input, if there
- were any, otherwise at the addressed line.
- Address
- .L 0
- is legal for this command; text is placed
- at the beginning of the buffer.
- .TP
- .RB (\|\fL.,.\fP\|) \|b [ +- ][\fIpagesize\fP][ pln\fR]
- Browse.
- Print a `page', normally 20 lines.
- The optional
- .L +
- (default) or
- .L -
- specifies whether the next or previous
- page is to be printed.
- The optional
- .I pagesize
- is the number of lines in a page.
- The optional
- .LR p ,
- .LR n ,
- or
- .L l
- causes printing in the specified format, initially
- .LR p .
- Pagesize and format are remembered between
- .L b
- commands.
- Dot is left at the last line displayed.
- .TP
- .RB (\|\fL.,.\fP\|) \|c
- .br
- .ns
- .TP
- <text>
- .br
- .ns
- .TP
- .B .
- Change.
- Delete the addressed lines, then accept input
- text to replace these lines.
- Dot is left at the last line input; if there were none,
- it is left at the line preceding the deleted lines.
- .TP
- .RB (\|\fL.,.\fP\|) \|d
- Delete the addressed lines from the buffer.
- Dot is set to the line following the last line deleted, or to
- the last line of the buffer if the deleted lines had no successor.
- .TP
- .BI e " filename"
- Edit.
- Delete the entire contents of the buffer;
- then read the named file into the buffer.
- Dot is set to the last line of the buffer.
- The number of characters read is typed.
- The file name is remembered for possible use in later
- .LR e ,
- .LR r ,
- or
- .L w
- commands.
- If
- .I filename
- is missing, the remembered name is used.
- .TP
- .BI E " filename"
- Unconditional
- .LR e ;
- see
- .RL ` q '
- below.
- .TP
- .BI f " filename"
- Print the currently remembered file name.
- If
- .I filename
- is given,
- the currently remembered file name is first changed to
- .IR filename .
- .TP
- .RB (\|\fL1,$\fP\|) \|g/\fIregular\ expression\fP/\fIcommand\ list\fP
- .PD 0
- .TP
- .RB (\|\fL1,$\fP\|) \|g/\fIregular\ expression\fP/
- .TP
- .RB (\|\fL1,$\fP\|) \|g/\fIregular\ expression\fP
- .PD
- Global.
- First mark every line which matches
- the given
- .IR regular expression .
- Then for every such line, execute the
- .I command list
- with dot initially set to that line.
- A single command or the first of multiple commands
- appears on the same line with the global command.
- All lines of a multi-line list except the last line must end with
- .LR \e .
- The
- .RB \&` \&. \&'
- terminating input mode for an
- .LR a ,
- .LR i ,
- .L c
- command may be omitted if it would be on the
- last line of the command list.
- The commands
- .L g
- and
- .L v
- are not permitted in the command list.
- Any character other than space or newline may
- be used instead of
- .L /
- to delimit the regular expression.
- The second and third forms mean
- .BI g/ regular\ expression /p \f1.
- .TP
- .RB (\| .\| ) \|i
- .PD 0
- .TP
- <text>
- .TP
- .B .
- Insert the given text before the addressed line.
- Dot is left at the last line input, or, if there were none,
- at the line before the addressed line.
- This command differs from the
- .I a
- command only in the placement of the
- text.
- .PD
- .TP
- .RB (\| .,.+1 \|) \|j
- Join the addressed lines into a single line;
- intermediate newlines are deleted.
- Dot is left at the resulting line.
- .TP
- .RB (\|\fL.\fP\|) \|k\fIx\fP
- Mark the addressed line with name
- .IR x ,
- which must be a lower-case letter.
- The address form
- .BI \' x
- then addresses this line.
- .ne 2.5
- .TP
- .RB (\|\fL.,.\fP\|) \|l
- List.
- Print the addressed lines in an unambiguous way:
- a tab is printed as
- .LR \et ,
- a backspace as
- .LR \eb ,
- backslashes as
- .LR \e\e ,
- and non-printing characters as
- a backslash, an
- .LR x ,
- and four hexadecimal digits.
- Long lines are folded,
- with the second and subsequent sub-lines indented one tab stop.
- If the last character in the line is a blank,
- it is followed by
- .LR \en .
- An
- .L l
- may be appended, like
- .LR p ,
- to any non-I/O command.
- .TP
- .RB (\|\fL.,.\fP\|) \|m\fIa
- Move.
- Reposition the addressed lines after the line
- addressed by
- .IR a .
- Dot is left at the last moved line.
- .TP
- .RB (\|\fL.,.\fP\|) \|n
- Number.
- Perform
- .LR p ,
- prefixing each line with its line number and a tab.
- An
- .L n
- may be appended, like
- .LR p ,
- to any non-I/O command.
- .TP
- .RB (\|\fL.,.\fP\|) \|p
- Print the addressed lines.
- Dot is left at the last line printed.
- A
- .L p
- appended to any non-I/O command causes the then current line
- to be printed after the command is executed.
- .TP
- .RB (\|\fL.,.\fP\|) \|P
- This command is a synonym for
- .LR p .
- .TP
- .B q
- Quit the editor.
- No automatic write
- of a file is done.
- A
- .L q
- or
- .L e
- command is considered to be in error if the buffer has
- been modified since the last
- .LR w ,
- .LR q ,
- or
- .L e
- command.
- .TP
- .B Q
- Quit unconditionally.
- .TP
- .RB ( $ )\|r\ \fIfilename\fP
- Read in the given file after the addressed line.
- If no
- .I filename
- is given, the remembered file name is used.
- The file name is remembered if there were no
- remembered file name already.
- If the read is successful, the number of characters
- read is printed.
- Dot is left at the last line read from the file.
- .TP
- .RB (\|\fL.,.\fP\|) \|s\fIn\fP/\fIregular\ expression\fP/\fIreplacement\fP/
- .PD 0
- .TP
- .RB (\|\fL.,.\fP\|) \|s\fIn\fP/\fIregular\ expression\fP/\fIreplacement\fP/g
- .TP
- .RB (\|\fL.,.\fP\|) \|s\fIn\fP/\fIregular\ expression\fP/\fIreplacement\fP
- .PD
- Substitute.
- Search each addressed
- line for an occurrence of the specified regular expression.
- On each line in which
- .I n
- matches are found
- .RI ( n
- defaults to 1 if missing),
- the
- .IR n th
- matched string is replaced by the replacement specified.
- If the global replacement indicator
- .L g
- appears after the command,
- all subsequent matches on the line are also replaced.
- It is an error for the substitution to fail on all addressed lines.
- Any character other than space or newline
- may be used instead of
- .L /
- to delimit the regular expression
- and the replacement.
- Dot is left at the last line substituted.
- The third form means
- .BI s n / regular\ expression / replacement\fP/p\f1.
- The second
- .L /
- may be omitted if the replacement is
- empty.
- .IP
- An ampersand
- .L &
- appearing in the replacement
- is replaced by the string matching the regular expression.
- The characters
- .BI \e n\f1,
- where
- .I n
- is a digit,
- are replaced by the text matched by the
- .IR n -th
- regular subexpression
- enclosed between
- .L (
- and
- .LR ) .
- When
- nested parenthesized subexpressions
- are present,
- .I n
- is determined by counting occurrences of
- .L (
- starting from the left.
- .IP
- A literal
- .LR & ,
- .LR / ,
- .L \e
- or newline may be included in a replacement
- by prefixing it with
- .LR \e .
- .TP
- .RB (\|\fL.,.\fP\|) \|t\|\fIa
- Transfer.
- Copy the addressed lines
- after the line addressed by
- .IR a .
- Dot is left at the last line of the copy.
- .TP
- .RB (\|\fL.,.\fP\|) \|u
- Undo.
- Restore the preceding contents
- of the first addressed line (sic), which must be the last line
- in which a substitution was made (double sic).
- .TP
- .RB (\|\fL1,$\fP\|) \|v/\fIregular\ expression\fP/\fIcommand\ list\fP
- This command is the same as the global command
- .L g
- except that the command list is executed with
- dot initially set to every line
- .I except
- those
- matching the regular expression.
- .TP
- .RB (\|\fL1,$\fP\|) \|w " \fIfilename\fP"
- Write the addressed lines to
- the given file.
- If the file does not exist,
- it is created with mode 666 (readable and writable by everyone).
- If no
- .I filename
- is given, the remembered file name, if any, is used.
- The file name is remembered if there were no
- remembered file name already.
- Dot is unchanged.
- If the write is successful, the number of characters written is
- printed.
- .TP
- .RB (\|\fL1,$\fP\|) \|W " \fIfilename\fP"
- Perform
- .LR w ,
- but append to, instead of overwriting, any existing file contents.
- .TP
- .RB ( $ ) \|=
- Print the line number of the addressed line.
- Dot is unchanged.
- .TP
- .BI ! shell\ command
- Send the remainder of the line after the
- .L !
- to
- .IR rc (1)
- to be interpreted as a command.
- Dot is unchanged.
- .TP
- .RB (\| .+1 )\|<newline>
- An address without a command is taken as a
- .L p
- command.
- A terminal
- .L /
- may be omitted from the address.
- A blank line alone is equivalent to
- .LR .+1p ;
- it is useful
- for stepping through text.
- .PP
- If an interrupt signal
- .SM (DEL)
- is sent,
- .I ed
- prints a
- .L ?
- and returns to its command level.
- .PP
- When reading a file,
- .I ed
- discards
- .SM NUL
- characters
- and all characters after the last newline.
- .SH FILES
- .B /tmp/e*
- .br
- .B ed.hup
- \ \ work is saved here if terminal hangs up
- .SH SOURCE
- .B /sys/src/cmd/ed.c
- .SH "SEE ALSO"
- .IR sam (1),
- .IR sed (1),
- .IR regexp (6)
- .SH DIAGNOSTICS
- .BI ? name
- for inaccessible file;
- .L ?TMP
- for temporary file overflow;
- .L ?
- for errors in commands or other overflows.
|