Go to the next section.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.
ed is a line-oriented text editor. It is used to create,
display, modify and otherwise manipulate text files, both interactively
and via shell scripts. A restricted version of
can only edit files in the current directory and cannot execute shell
ed is the "standard" text editor in the sense that
it is the original editor for Unix, and thus widely available. For
most purposes, however, it is superceded by full-screen editors such as
Emacs and Vi.
The sample sessions below illustrate some basic concepts of line editing
ed. We begin by creating a file, `sonnet', with some
help from Shakespeare. As with the shell, all input to
be followed by a newline character. Comments begin with a `#'.
$ ed # The `a' command is for appending text to the editor buffer. a No more be grieved at that which thou hast done. Roses have thorns, and filvers foutians mud. Clouds and eclipses stain both moon and sun, And loathsome canker lives in sweetest bud. . # Entering a single period on a line returns
edto command mode. # Now write the buffer to the file `sonnet' and quit: w sonnet 183 #
edreports the number of characters written. q $ ls -l total 2 -rw-rw-r-- 1 alm 183 Nov 10 01:16 sonnet $
ed is done in two distinct
modes: command and input. When first invoked,
in command mode. In this mode commands are read from the standard input
and executed to manipulate the contents of the editor buffer. When an
input command, such as `a' (append), `i' (insert) or `c'
(change), is given,
ed 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. A line consists of the text up to and including a
newline character. Input mode is terminated by
entering a single period (`.') on a line.
In the next example, some typos are corrected in the file `sonnet'.
$ ed sonnet 183 # Begin by printing the buffer to the terminal with the `p' command. # The `,' means "all lines." ,p No more be grieved at that which thou hast done. Roses have thorns, and filvers foutians mud. Clouds and eclipses stain both moon and sun, And loathsome canker lives in sweetest bud. # Select line 2 for editing. 2 Roses have thorns, and filvers foutians mud. # Use the substitute command, `s', to replace `filvers' with `silver', # and print the result. s/filvers/silver/p Roses have thorns, and silver foutians mud. # And correct the spelling of `fountains'. s/utia/untai/p Roses have thorns, and silver fountains mud. w sonnet 183 q $
ed may be invoked with or without arguments See section Invoking GNU
invoked with a file argument, a copy of file is read into
the editor's buffer. Changes are made to this copy and not directly to
file itself. Upon quitting
ed, any changes not explicitly
saved with a `w' command See section Commands are lost.
ed is line-oriented, we have to tell it which line, or
range of lines we want to edit. In the above example, we do this by
specifying the line's number, or sequence in the buffer. Alternatively,
we could have specified a unique string in the line, e.g.,
`/filvers/', where the `/'s delimit the string in question.
Subsequent commands affect only the selected line, a.k.a. the
current line. Portions of that line are then replaced with the
substitute command, whose syntax is
ed accepts only one command per line,
the print command `p' is an exception, and may be appended to the
end of most commands.
In the next example, a title is added to our sonnet.
$ ed sonnet 183 a Sonnet #50 . ,p No more be grieved at that which thou hast done. Roses have thorns, and silver fountains mud. Clouds and eclipses stain both moon and sun, And loathsome canker lives in sweetest bud. Sonnet #50 # The title got appended to the end; we should have used `0a' # to append "before the first line." # Move the title to its proper place. 5m0p Sonnet #50 # The title is now the first line, and the current line has been # set to this line as well. ,p Sonnet #50 No more be grieved at that which thou hast done. Roses have thorns, and silver fountains mud. Clouds and eclipses stain both moon and sun, And loathsome canker lives in sweetest bud. wq sonnet 195 $
ed opens a file, the current line is initially set to the last
line of that file. Similarly, the move command `m' sets the current
line to the last line moved.
In summary: All
ed commands operate on whole lines or ranges of
lines; e.g., the `d' command deletes lines; the `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 second example above. However even
there, the `s' command is applied to whole lines at a time.
ed commands consist of zero or more line addresses,
followed by a single character command and possibly additional
parameters; i.e., commands have the structure:
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 default addresses are supplied.
Related programs or routines are
sh (1). Relevant documents
Unix User's Manual Supplementary Documents: 12 -- 13
B. W. Kernighan and P. J. Plauger: "Software Tools in Pascal", Addison-Wesley, 1981.
Go to the next section.