home *** CD-ROM | disk | FTP | other *** search
- NAME
- ed, red - text editor
-
- SYNTAX
- ed [-] [-pstring] [file]
-
- red [-] [file]
-
- DESCRIPTION
- The ed text editor is the standard text editor. If the file
- argument is given, ed simulates an e command (see below) on
- the named file; that is to say, the file is read into ed's
- buffer so that it can be edited. The optional - suppresses
- the printing of character counts by e, r, and w commands, of
- diagnostics from e and q commands, and of the ! prompt after
- a !shell command. The -p option allows the user to specify
- a prompt string. The ed text editor operates on a copy of
- the file it is editing; changes made to the copy have no
- effect on the file until a w (write) command is given. The
- copy of the text being edited resides in a temporary file
- called the buffer. There is only one buffer.
-
- The red text editor is a restricted version of ed. It only
- allows editing of files in the current directory. It prohi-
- bits executing shell commands via !shell command. Attempts
- to bypass these restrictions result in an error message
- (restricted shell).
-
- NOTE
-
- While inputting text, tab characters are expanded
- to every eighth column as is the default.
-
-
- Commands to ed have a simple and regular structure: zero,
- one, or two addresses followed by a single-character com-
- mand, possibly followed by parameters to that command.
- These addresses specify one or more lines in the buffer.
- Every command that requires addresses has default addresses,
- so that the addresses can frequently be omitted.
-
- In general, only one command appears on a line. Certain
- commands allow the input of text. This text is placed in
- the appropriate place in the buffer. While ed is accepting
- text, it is said to be in input mode. In input mode, no
- commands are recognized; all input is merely collected.
- Input mode is exited by typing a period (.) alone at the
- beginning of a line.
-
- The ed text editor supports a limited form of regular
- expression notation; regular expressions are used in
- addresses to specify lines and in some commands (for exam-
- ple, s) to specify portions of a line that are to be substi-
- tuted. A regular expression (RE) specifies a set of charac-
- ter strings. A member of this set of strings is said to be
- matched by the RE. The REs allowed by ed are constructed as
- follows:
-
- The following one-character REs match a single character:
-
- 1.1 An ordinary character (not one of those discussed in
- 1.2 below) is a one-character RE that matches itself.
-
- 1.2 A backslash (\) followed by any special character is
- a one-character RE that matches the special character
- itself. The special characters are:
-
- a. ., *, [, and \ (period, asterisk, left square
- bracket, and backslash, respectively), which
- are always special, except when they appear
- within square brackets ([]; see 1.4 below).
-
- b. ^ (caret or circumflex), which is special at
- the beginning of an entire RE (see 3.1 and 3.2
- below), or when it immediately follows the left
- of a pair of square brackets ([]) (see 1.4
- below).
-
- c. $ (currency symbol), which is special at the
- end of an entire RE (see 3.2 below).
-
- d. The character used to bound (that is, delimit)
- an entire RE, which is special for that RE (for
- example, see how slash (/) is used in the g
- command, below.)
-
- 1.3 A period (.) is a one-character RE that matches any
- character except new-line.
-
- 1.4 A non-empty string of characters enclosed in square
- brackets ([]) is a one-character RE that matches any
- one character in that string. If, however, the first
- character of the string is a circumflex (^), the
- one-character RE matches any character except new-
- line and the remaining characters in the string. The
- ^ has this special meaning only if it occurs first in
- the string. The minus (-) may be used to indicate a
- range of consecutive ASCII characters; for example,
- [0-9] is equivalent to [0123456789]. The - loses
- this special meaning if it occurs first (after an
- initial ^, if any) or last in the string. The right
- square bracket (]) does not terminate such a string
- when it is the first character within it (after an
- initial ^, if any). For example, []a-f] matches
- either a right square bracket (]) or one of the
- letters a through f inclusive. The four characters
- listed in 1.2.a above stand for themselves within
- such a string of characters.
-
- The following rules may be used to construct REs from one-
- character REs:
-
- 2.1 A one-character RE is a RE that matches whatever the
- one-character RE matches.
-
- 2.2 A one-character RE followed by an asterisk (*) is a
- RE that matches zero or more occurrences of the one-
- character RE. If there is any choice, the longest
- leftmost string that permits a match is chosen.
-
- 2.3 A one-character RE followed by \{m\}, \{m,\}, or
- \{m,n\} is a RE that matches a range of occurrences
- of the one-character RE. The values of m and n must
- be non-negative integers less than 256; \{m\} matches
- exactly m occurrences; \{m,\} matches at least m
- occurrences; \{m,n\} matches any number of
- occurrences between m and n inclusive. Whenever a
- choice exists, the RE matches as many occurrences as
- possible.
-
- 2.4 The concatenation of REs is a RE that matches the
- concatenation of the strings matched by each com-
- ponent of the RE.
-
- 2.5 A RE enclosed between the character sequences \( and
- \) is a RE that matches whatever the unadorned RE
- matches.
-
- 2.6 The expression \n matches the same string of charac-
- ters as was matched by an expression enclosed between
- \( and \) earlier in the same RE. Here n is a digit;
- the sub-expression specified is that beginning with
- the n-th occurrence of \( counting from the left.
- For example, the expression ^\(.*\)\1$ matches a line
- consisting of two repeated appearances of the same
- string.
-
- Finally, an entire RE may be constrained to match only an
- initial segment or final segment of a line (or both):
-
- 3.1 A circumflex (^) at the beginning of an entire RE
- constrains that RE to match an initial segment of a
- line.
-
- 3.2 A currency symbol ($) at the end of an entire RE con-
- strains that RE to match a final segment of a line.
-
- The construction ^entire RE$ constrains the entire RE to
- match the entire line.
-
- The null RE (for example, //) is equivalent to the last RE
- encountered. See also the last paragraph before FILES
- below.
-
- To understand addressing in ed it is necessary to know that
- at any time there is a current line. Generally speaking,
- the current line is the last line affected by a command; the
- exact effect on the current line is discussed under the
- description of each command. Addresses are constructed as
- follows:
-
- 1. The character . addresses the current line.
-
- 2. The character $ addresses the last line of the
- buffer.
-
- 3. A decimal number n addresses the n-th line of the
- buffer.
-
- 4. 'x addresses the line marked with the mark name char-
- acter x, which must be a lower-case letter. Lines
- are marked with the k command described below.
-
- 5. A RE enclosed by slashes (/) addresses the first line
- found by searching forward from the line following
- the current line toward the end of the buffer and
- stopping at the first line containing a string match-
- ing the RE. If necessary, the search wraps around to
- the beginning of the buffer and continues up to and
- including the current line, so that the entire buffer
- is searched. See also the last paragraph before
- FILES below.
-
- 6. A RE enclosed in question marks (?) addresses the
- first line found by searching backward from the line
- preceding the current line toward the beginning of
- the buffer and stopping at the first line containing
- a string matching the RE. If necessary, the search
- wraps around to the end of the buffer and continues
- up to and including the current line. See also the
- last paragraph before FILES below.
-
- 7. An address followed by a plus sign (+) or a minus
- sign (-) followed by a decimal number specifies that
- address plus (respectively minus) the indicated
- number of lines. The plus sign may be omitted.
-
- 8. If an address begins with + or -, the addition or
- subtraction is taken with respect to the current
- line. For example, -5 is understood to mean .-5.
-
- 9. If an address ends with + or -, then 1 is added to or
- subtracted from the address, respectively. As a
- consequence of this rule and of rule 8 immediately
- above, the address - refers to the line preceding the
- current line. (To maintain compatibility with ear-
- lier versions of the editor, the character ^ in
- addresses is entirely equivalent to -.) Moreover,
- trailing + and - characters have a cumulative effect,
- so -- refers to the current line less 2.
-
- 10. For convenience, a comma (,) stands for the address
- pair 1,$, while a semicolon (;) stands for the pair
- .,$.
-
- Commands may require zero, one, or two addresses. Commands
- that require no addresses regard the presence of an address
- as an error. Commands that accept one or two addresses
- assume default addresses when an insufficient number of
- addresses is given; if more addresses are given than such a
- command requires, the last one(s) are used.
-
- Typically, addresses are separated from each other by a
- comma (,). They may also be separated by a semicolon (;).
- In the latter case, the current line (.) is set to the first
- address, and only then is the second address calculated.
- This feature can be used to determine the starting line for
- forward and backward searches (see rules 5. and 6. above).
- The second address of any two-address sequence must
- correspond to a line that follows, in the buffer, the line
- corresponding to the first address.
-
- In the following list of ed commands, the default addresses
- are shown in parentheses. The parentheses are not part of
- the address; they show that the given addresses are the
- default.
-
- It is generally illegal for more than one command to appear
- on a line. However, any command (except e, f, r, or w) may
- be suffixed by l, n or p, in which case the current line is
- either listed, numbered or printed, respectively, as dis-
- cussed below under the l, n and p commands.
-
- (.)a
-
- <text>
-
- . The append command reads the given text
- and appends it after the addressed line;
- . is left at the last inserted line, or,
- if there were none, at the addressed
- line. Address 0 is legal for this com-
- mand: it causes the ``appended'' text to
- be placed at the beginning of the
- buffer. The maximum number of charac-
- ters that may be entered from a terminal
- is 256 per line (including the new line
- character).
-
- (.)c
- <text>
- .
- The change command deletes the addressed
- lines, then accepts input text that
- replaces these lines; . is left at the
- last line input, or, if there were none,
- at the first line that was not deleted.
-
- (.,.)d
- The delete command deletes the addressed
- lines from the buffer. The line after
- the last line deleted becomes the
- current line; if the lines deleted were
- originally at the end of the buffer, the
- new last line becomes the current line.
-
- e file
- The edit command causes the entire con-
- tents of the buffer to be deleted, and
- then the named file to be read in; . is
- set to the last line of the buffer. If
- no file name is given, the currently-
- remembered file name, if any, is used
- (see the f command). The number of
- characters read is typed; file is remem-
- bered for possible use as a default file
- name in subsequent e, r, and w commands.
- If file is replaced by !, the rest of
- the line is taken to be a shell, sh(1),
- command whose output is to be read.
- Such a shell command is not remembered
- as the current file name. See also
- DIAGNOSTICS below.
-
- E file
- The edit command is like e, except that
- the editor does not check to see if any
- changes have been made to the buffer
- since the last w command.
-
- f file
- If file is given, the file-name command
- changes the currently-remembered file
- name to file; otherwise, it prints the
- currently-remembered file name.
-
- (1,$)g/RE/command list
- In the global command, the first step is
- to mark every line that matches the
- given RE. Then, for every such line,
- the given command list is executed with
- . initially set to that line. A single
- command or the first of a list of com-
- mands appears on the same line as the
- global command. All lines of a multi-
- line list except the last line must be
- ended with a \; a, i, and c commands and
- associated input are permitted; the .
- terminating input mode may be omitted if
- it would be the last line of the command
- list. An empty command list is
- equivalent to the p command. The g, G,
- v, and V commands are not permitted in
- the command list. See also RESTRICTIONS
- and the last paragraph before FILES
- below.
-
- (1,$)G/RE/
- In the interactive Global command, the
- first step is to mark every line that
- matches the given RE. Then, for every
- such line, that line is printed, . is
- changed to that line, and any one com-
- mand (other than one of the a, c, i, g,
- G, v, and V commands) may be input and
- is executed. After the execution of
- that command, the next marked line is
- printed, and so on; a new-line acts as a
- null command; an & causes the re-
- execution of the most recent command
- executed within the current invocation
- of G. Note that the commands input as
- part of the execution of the G command
- may address and affect any lines in the
- buffer. The G command can be terminated
- by an interrupt signal (ASCII DEL or
- BREAK).
-
- h
- The help command gives a short error
- message that explains the reason for the
- most recent ? diagnostic.
-
- H
- The help command causes ed to enter a
- mode in which error messages are printed
- for all subsequent ? diagnostics. It
- will also explain the previous ? if
- there was one. The H command alter-
- nately turns this mode on and off; it is
- initially off.
-
- (.)i
- <text>
- .
- The insert command inserts the given
- text before the addressed line; . is
- left at the last inserted line, or, if
- there were none, at the addressed line.
- This command differs from the a command
- only in the placement of the input text.
- Address 0 is not legal for this command.
- The maximum number of characters that
- may be entered from a terminal is 256
- per line (including the new line charac-
- ter).
-
-
- (.,.+1)j
- The join command joins contiguous lines
- by removing the appropriate new-line
- characters. If exactly one address is
- given, this command does nothing.
-
- (.)kx
- The mark command marks the addressed
- line with name x, which must be a
- lower-case letter. The address 'x then
- addresses this line; . is unchanged.
-
- (.,.)l
- The list command prints the addressed
- lines in an unambiguous way: a few non-
- printing characters (for example, tab,
- backspace) are represented by (hope-
- fully) mnemonic overstrikes, all other
- non-printing characters are printed in
- octal, and long lines are folded. An l
- command may be appended to any other
- command other than e, f, r, or w.
-
- (.,.)ma
- The B. move command repositions the
- addressed line(s) after the line
- addressed by a. Address 0 is legal for a
- and causes the addressed line(s) to be
- moved to the beginning of the file; it
- is an error if address a falls within
- the range of moved lines; . is left at
- the last line moved.
-
- (.,.)n
- The number command prints the addressed
- lines, preceding each line by its line
- number and a tab character; . is left at
- the last line printed. The n command
- may be appended to any other command
- other than e, f, r, or w.
-
- (.,.)p
- The print command prints the addressed
- lines; . is left at the last line
- printed. The p command may be appended
- to any other command other than e, f, r,
- or w; for example, dp deletes the
- current line and prints the new current
- line.
-
- P
- The editor will prompt with a * for all
- subsequent commands. The P command
- alternately turns this mode on and off;
- it is initially off.
-
- q
- The quit command causes ed to exit. No
- automatic write of a file is done (but
- see DIAGNOSTICS below).
-
- Q
- The editor exits without checking if
- changes have been made in the buffer
- since the last w command.
-
- ($)r file
- The read command reads in the given file
- after the addressed line. If no file
- name is given, the currently-remembered
- file name, if any, is used (see e and f
- commands). The currently-remembered
- file name is not changed unless file is
- the very first file name mentioned since
- ed was invoked. Address 0 is legal for
- r and causes the file to be read at the
- beginning of the buffer. If the read is
- successful, the number of characters
- read is typed; . is set to the last line
- read in. If file is replaced by !, the
- rest of the line is taken to be a shell
- (sh(1)) command whose output is to be
- read. For example, "$r !ls" appends
- current directory to the end of the file
- being edited. Such a shell command is
- not remembered as the current file name.
-
- (.,.)s/RE/replacement/ or
- (.,.)s/RE/replacement/g
- The substitute command searches each
- addressed line for an occurrence of the
- specified RE. In each line in which a
- match is found, all (non-overlapped)
- matched strings are replaced by the
- replacement if the global replacement
- indicator g appears after the command.
- If the global indicator does not appear,
- only the first occurrence of the matched
- string is replaced. It is an error for
- the substitution to fail on all
- addressed lines. Any character other
- than space or new-line may be used
- instead of / to delimit the RE and the
- replacement; . is left at the last line
- on which a substitution occurred. See
- also the last paragraph before FILES
- below.
-
- An ampersand (&) appearing in the
- replacement is replaced by the string
- matching the RE on the current line.
- The special meaning of & in this context
- may be suppressed by preceding it by \.
- As a more general feature, the charac-
- ters \n, where n is a digit, are
- replaced by the text matched by the n-th
- regular subexpression of the specified
- RE enclosed between \( and \). When
- nested parenthesized subexpressions are
- present, n is determined by counting
- occurrences of \( starting from the
- left. When the character % is the only
- character in the replacement, the
- replacement used in the most recent sub-
- stitute command is used as the replace-
- ment in the current substitute command.
- The % loses its special meaning when it
- is in a replacement string of more than
- one character or is preceded by a \.
-
- A line may be split by substituting a
- new-line character into it. The new-
- line in the replacement must be escaped
- by preceding it by \. Such substitution
- cannot be done as part of a g or v com-
- mand list.
-
- (.,.)ta
- This command acts just like the m com-
- mand, except that a copy of the
- addressed lines is placed after address
- a (which may be 0); . is left at the
- last line of the copy.
-
- u
- The undo command nullifies the effect of
- the most recent command that modified
- anything in the buffer, namely the most
- recent a, c, d, g, i, j, m, r, s, t, v,
- G, or V command.
-
- (1,$)v/RE/command list
- This command is the same as the global
- command g except that the command list
- is executed with . initially set to
- every line that does not match the RE.
-
- (1,$)V/RE/
- This command is the same as the interac-
- tive global command G except that the
- lines that are marked during the first
- step are those that do not match the RE.
-
- (1,$)w file
- The write command writes the addressed
- lines into the named file. If the file
- does not exist, it is created with mode
- 666 (readable and writable by everyone),
- unless your umask setting (see sh(1))
- dictates otherwise. The currently-
- remembered file name is not changed
- unless file is the very first file name
- mentioned since ed was invoked. If no
- file name is given, the currently-
- remembered file name, if any, is used
- (see e and f commands); . is unchanged.
- If the command is successful, the number
- of characters written is typed. If file
- is replaced by !, the rest of the line
- is taken to be a shell (sh(1)) command
- whose standard input is the addressed
- lines. Such a shell command is not
- remembered as the current file name.
-
- ($)=
- The line number of the addressed line is
- typed; . is unchanged by this command.
-
- !shell command
- The remainder of the line after the ! is
- sent to the UNIX System shell (sh(1)) to
- be interpreted as a command. Within the
- text of that command, the unescaped
- character % is replaced with the remem-
- bered file name; if a ! appears as the
- first character of the shell command, it
- is replaced with the text of the previ-
- ous shell command. Thus, !! will repeat
- the last shell command. If any expan-
- sion is performed, the expanded line is
- echoed; . is unchanged.
-
- (.+1)<new-line>
- An address alone on a line causes the
- addressed line to be printed. A new-
- line alone is equivalent to .+1p; it is
- useful for stepping forward through the
- buffer.
-
- If an interrupt signal (ASCII DEL or BREAK) is sent, ed
- prints a ? and returns to its command level.
-
- Some size limitations: 512 characters per line, 256 charac-
- ters per global command list, 64 characters per file name,
- and 128K characters in the buffer. The limit on the number
- of lines depends on the amount of user memory: each line
- takes 1 word.
-
- When reading a file, ed discards ASCII NUL characters and
- all characters after the last new-line. Files (for example,
- a.out) that contain characters not in the ASCII set (bit 8
- on) cannot be edited by ed.
-
- If the closing delimiter of a RE or of a replacement string
- (for example, /) would be the last character before a new-
- line, that delimiter may be omitted, in which case the
- addressed line is printed. The following pairs of commands
- are equivalent:
- s/s1/s2 s/s1/s2/p
- g/s1 g/s1/p
- ?s1 ?s1?
-
- RESTRICTIONS
- A ! command cannot be subject to a g or a v command.
- The ! command and the ! escape from the e, r, and w commands
- cannot be used if the the editor is invoked from a res-
- tricted shell. For further information, see sh(1).
- The sequence \n in a RE does not match a new-line character.
- The l command mishandles DEL.
-
- DIAGNOSTICS
- ? for command errors.
- ?file for an inaccessible file.
- (use the help and Help commands for detailed
- explanations).
-
- If changes have been made in the buffer since the last w
- command that wrote the entire buffer, ed warns the user if
- an attempt is made to destroy ed's buffer via the e or q
- commands: it prints ? and allows one to continue editing. A
- second e or q command at this point will take effect. The -
- command-line option inhibits this feature.
-
- FILES
- /tmp/e# temporary; # is the process number.
- ed.hup work is saved here if the terminal is hung up.
-
- SEE ALSO
- grep(1), sed(1), sh(1), stty(1),
-