Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

grep(1)

red(1)

sed(1)

sh(1sh)

stty(1)



ED(1)                   COMMAND REFERENCE                   ED(1)



NAME
     ed - text editor

SYNOPSIS
     ed [ - ] [ -p[prompt ] [ -q ] [ file ]

DESCRIPTION
     Ed 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.  Ed 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.

     Commands to ed have a simple and regular structure: zero,
     one, or two addresses followed by a single-character
     command, 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 very often be omitted.

     In general, only one command may appear 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 this mode, no
     commands are recognized; all input is merely collected.
     Input mode is left by typing a period (.) alone at the
     beginning of a line.

     Ed supports a limited form of regular expression notation;
     regular expressions are used in addresses to specify lines
     and in some commands (e.g., s) to specify portions of a line
     that are to be substituted.  A regular expression (RE)
     specifies a set of character 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



Printed 4/6/89                                                  1





ED(1)                   COMMAND REFERENCE                   ED(1)



                  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 (i.e., 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); e.g., []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.




Printed 4/6/89                                                  2





ED(1)                   COMMAND REFERENCE                   ED(1)



     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
            component 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
            characters 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
            constrains 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 (e.g., //) 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:




Printed 4/6/89                                                  3





ED(1)                   COMMAND REFERENCE                   ED(1)



      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
            character 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
            matching 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; e.g, -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
            earlier 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



Printed 4/6/89                                                  4





ED(1)                   COMMAND REFERENCE                   ED(1)



            .,$.

     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
     discussed 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 command: it causes the
        ``appended'' text to be placed at the beginning of the
        buffer.  The maximum number of characters that may be
        entered from a terminal is 256 per line (including the
        newline 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



Printed 4/6/89                                                  5





ED(1)                   COMMAND REFERENCE                   ED(1)



        end of the buffer, the new last line becomes the current
        line.

     e file
        The edit command causes the entire contents 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 remembered 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
        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 commands 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 BUGS 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 command (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



Printed 4/6/89                                                  6





ED(1)                   COMMAND REFERENCE                   ED(1)



        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 alternately 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 newline
        character).

     (.,.+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: non-printing characters are printed in
        octal, except for backspace, which is printed as '-',
        backspace, '<', and tab, which is printed as '-',
        backspace, '>'.  Long lines are folded.  An l command may
        be appended to any other command other than e, f, r, or
        w.

     (.,.)ma
        The 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



Printed 4/6/89                                                  7





ED(1)                   COMMAND REFERENCE                   ED(1)



        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 a listing of the
        current directory to the end of the file being edited.
        Such a shell command is not remembered as the current
        file name.

     s  The substitute command searches each addressed line for
        an occurrence of the specified RE.  substitute commands
        take the form: (.,.)s/ RE / replacement /

        or

        (.,.)s/ RE / replacement /g 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



Printed 4/6/89                                                  8





ED(1)                   COMMAND REFERENCE                   ED(1)



        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
        characters \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
        substitute command is used as the replacement 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 command list.

     (.,.)ta
        This command acts just like the m command, 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 interactive 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(1sh)) dictates otherwise.  The
        currently-remembered file name is not changed unless file
        is the very first file name mentioned since ed was



Printed 4/6/89                                                  9





ED(1)                   COMMAND REFERENCE                   ED(1)



        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 UTek
        System shell (sh(1)) to be interpreted as a command.
        Within the text of that command, the unescaped character
        % is replaced with the remembered file name; if a !
        appears as the first character of the shell command, it
        is replaced with the text of the previous shell command.
        Thus, !! will repeat the last shell command.  If any
        expansion 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
     characters per global command list, 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 (e.g., 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
     (e.g., /) 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 q/s1/p
          ?s1 ?s1?




Printed 4/6/89                                                 10





ED(1)                   COMMAND REFERENCE                   ED(1)



OPTIONS
     -  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.

     -h Turns on help mode. See the description of the H command.

     -p[prompt]
        Causes the specified prompt to be printed when ed has
        finished with a command and is waiting for the next one.
        If no prompt is specified, '*' is used.  Without the -p
        option, no prompting is done.

     -q Allows the signal SIGQUIT (normally generated by the
        character ^\) to terminate the edit session, and turns
        off the - option. Normally, SIGQUIT is ignored.

FILES
     /tmp/e$$  Temporary; $$ is the process number

     ed.hup    Work is saved here if the terminal is hung up

DIAGNOSTICS
     ?         For command errors.

     ?filename 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.

VARIABLES
     HOME           The user's home directory. Upon abnormal
                    termination of ed , a file called ed.hup is
                    placed in this directory."

     SHELL          The user's login shell. Used for shell
                    escapes.

RETURN VALUE
     [NOERRS]

     [NP_WARN]      An error warranting a warning message
                    occurred. Execution continues.

     [NP_ERR]       An error occurred that was not a system
                    error.  Execution terminated.



Printed 4/6/89                                                 11





ED(1)                   COMMAND REFERENCE                   ED(1)



CAVEATS
     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
     restricted shell (see lsh(1sh)).

     The sequence \n in a RE does not match a new-line character.

     The l command mishandles DEL.

     Characters are masked to 7 bits on input.

SEE ALSO
     grep(1), red(1), sed(1), sh(1sh), and stty(1).








































Printed 4/6/89                                                 12



%%index%%
na:192,68;
sy:260,216;
de:476,2881;3621,3022;6907,2985;10156,2908;13328,2728;16320,3212;19796,2832;22892,2932;26088,3372;29724,2560;
op:32548,976;
fi:33524,192;
di:33716,769;
va:34485,392;
rv:34877,358;
ca:35499,497;
se:35996,214;
%%index%%000000000264

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026