+ED(1) BSD Reference Manual ED(1)
+
+N\bNA\bAM\bME\bE
+ e\bed\bd - text editor
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ e\bed\bd [-\b-] [_\bf_\bi_\bl_\be]
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ E\bEd\bd once was the standard text editor in the early days of UNIX. While its
+ life as a line editor is dated, e\bed\bd still resides on systems produced by a
+ variety of vendors for good reason. Because of its small size and sim-
+ plicity, e\bed\bd,\b, is found on the root partition (_\b/_\bb_\bi_\bn_\b/_\be_\bd) for emergency edit-
+ ing when normal system reboots fail or single user tasks are performed
+ and _\b/_\bu_\bs_\br is not mounted. E\bEd\bd is also useful for script editing tasks, and
+ although there is nothing which can be done by e\bed\bd that cannot be per-
+ formed by sed(1), ex(1) or _\bG_\bn_\bu _\bE_\bm_\ba_\bc_\bs, e\bed\bd remains the simplest and easi-
+ est to use.
+
+ If a _\bf_\bi_\bl_\be argument is given, e\bed\bd simulates an e\be command (see below) on the
+ named file; that is to say, the file is read into e\bed\bd's buffer so that it
+ can be edited.
+
+ Available options:
+
+ -\b- Suppresses the printing of explanatory output and should be used
+ when the standard input is an editor script.
+
+ E\bEd\bd operates on a copy of any file it is editing; changes made in the copy
+ have no effect on the file until a w\bw (write) command is given. The copy
+ of the text being edited resides in a temporary file called the _\bb_\bu_\bf_\bf_\be_\br.
+
+ Commands to e\bed\bd have a simple and regular structure: zero or more
+ _\ba_\bd_\bd_\br_\be_\bs_\bs_\be_\bs followed by a single character c\bco\bom\bmm\bma\ban\bnd\bd, possibly followed by
+ parameters to the command. These addresses specify one or more lines in
+ the buffer. Missing addresses are supplied by default.
+
+ In general, only one command may appear on a line. Certain commands al-
+ low the addition of text to the buffer. While e\bed\bd is accepting text, it
+ is said to be in _\bi_\bn_\bp_\bu_\bt _\bm_\bo_\bd_\be. In this mode, no commands are recognized;
+ all input is merely collected. Input mode is left by typing a period `_\b.'
+ alone at the beginning of a line.
+
+ E\bEd\bd supports a limited form of _\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn notation. A regular ex-
+ pression specifies a set of strings of characters. A member of this set
+ of strings is said to be _\bm_\ba_\bt_\bc_\bh_\be_\bd by the regular expression. In the fol-
+ lowing specification for regular expressions the word `character' means
+ any character but newline.
+
+ 1. Any character except a special character matches itself. Special
+ characters are the regular expression delimiter plus `\[.' and some-
+ times `^*$'.
+
+ 2. A ``.'' matches any character.
+
+ 3. A `\' followed by any character except a digit or ( matches that
+ character.
+
+ 4. A nonempty string _\bs bracketed [_\bs] (or [_\b^_\bs]) matches any character in
+ (or not in) _\bs_\b. In _\bs_\b, `\' has no special meaning, and may only appear
+ as the first letter. A substring _\ba_\b-_\bb, with _\ba and _\bb in ascending
+ ASCII order, stands for the inclusive range of ASCII characters.
+
+ 5. A regular expression of form 1-4 followed by `*' matches a sequence
+
+ of 0 or more matches of the regular expression.
+
+ 6. A regular expression, _\bx, of form 1-8, bracketed \( _\bx\) matches what
+ _\bx matches.
+
+ 7. A \ followed by a digit _\bn matches a copy of the string that the
+ bracketed regular expression beginning with the _\bnth \( matched.
+
+ 8. A regular expression of form 1-8, _\bx, followed by a regular expres-
+ sion of form 1-7, _\by matches a match for _\bx followed by a match for _\by,
+ with the _\bx match being as long as possible while still permitting a
+ _\by match.
+
+ 9. A regular expression of form 1-8 preceded by `^' (or followed by
+ `$'), is constrained to matches that begin at the left (or end at
+ the right) end of a line.
+
+ 10. A regular expression of form 1-9 picks out the longest among the
+ leftmost matches in a line.
+
+ 11. An empty regular expression stands for a copy of the last regular
+ expression encountered.
+
+ Regular expressions are used in addresses to specify lines and in one
+ command (see _\bs below) to specify a portion of a line which is to be re-
+ placed. If it is desired to use one of the regular expression metachar-
+ acters as an ordinary character, that character may be preceded by `\'.
+ This also applies to the character bounding the regular expression (often
+ `/') and to `\' itself.
+
+ To understand addressing in e\bed\bd it is necessary to know that at any time
+ there is a _\bc_\bu_\br_\br_\be_\bn_\bt _\bl_\bi_\bn_\be_\b. Generally speaking, 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 the command. Addresses are con-
+ structed as follows.
+
+ 1. The character `_\b.' addresses the current line.
+
+ 2. The character `_\b$' addresses the last line of the buffer.
+
+ 3. A decimal number _\bn addresses the _\bnth line of the buffer.
+
+ 4. `'_\bx' addresses the line marked with the name _\bx, which must be a low-
+ er-case letter. Lines are marked with the _\bk command described be-
+ low.
+
+ 5. A regular expression enclosed in slashes `/' 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.
+
+ 6. A regular expression enclosed in queries `?' addresses the line
+ found by searching backward from the current line and stopping at
+ the first line containing a string that matches the regular expres-
+ sion. If necessary the search wraps around to the end of the
+ buffer.
+
+ 7. An address followed by a plus sign `+' or a minus sign `-' followed
+ by a decimal number specifies that address plus (resp. 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 (resp. subtract-
+ ed). As a consequence of this rule and rule 8, the address `-'
+ refers to the line before the current line. Moreover, trailing `+'
+ and `-' characters have cumulative effect, so `--' refers to the
+ current line less 2.
+
+ 10. To maintain compatibility with earlier versions of the editor, the
+ character `^' in addresses is equivalent to `-'
+
+ 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 insuffi-
+ cient are given. If more addresses are given than such a command re-
+ quires, the last one or two (depending on what is accepted) are used.
+
+ Addresses are separated from each other typically by a comma `,' They may
+ also be separated by a semicolon `;' In this case the current line `.' is
+ set to the previous address before the next address is interpreted. This
+ feature can be used to determine the starting line for forward and back-
+ ward searches (`/', `?') The second address of any two-address sequence
+ must correspond to a line following the line corresponding to the first
+ address. The special form `%' is an abbreviation for the address pair
+ `1,$'.
+
+ In the following list of e\bed\bd 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.
+
+ As mentioned, it is generally illegal for more than one command to appear
+ on a line. However, most commands may be suffixed by `p' or by `l', in
+ which case the current line is either printed or listed respectively in
+ the way discussed below. Commands may also be suffixed by `n', meaning
+ the output of the command is to be line numbered. These suffixes may be
+ combined in any order.
+
+ (_\b.)a\ba
+ <text>
+ .\b.
+ The append command reads the given text and appends it after the
+ addressed line. `_\b.' is left on the last line input, if there were
+ any, otherwise at the addressed line. Address `0' is legal for
+ this command; text is placed at the beginning of the buffer.
+
+ (_\b.,_\b.)c\bc
+ <text>
+ .\b.
+ The change command deletes the addressed lines, then accepts input
+ text which replaces these lines. `_\b.' is left at the last line in-
+ put; if there were none, it is left at the line preceding the
+ deleted lines.
+
+ (_\b.,_\b.)d\bd
+ <text>
+ .\b.
+ The delete command deletes the addressed lines from the buffer.
+ The line originally after the last line deleted becomes the current
+ line; if the lines deleted were originally at the end, the new last
+ line becomes the current line.
+
+ e\be _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The edit command causes the entire contents of the buffer to be
+ deleted, and then the named file to be read in. `_\b.' is set to the
+ last line of the buffer. The number of characters read is typed.
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is remembered for possible use as a default file name in a
+ subsequent r\br or w\bw command. If _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is missing, the remembered
+ name is used.
+
+
+ E\bE _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ This command is the same as e\be, except that no diagnostic results
+ when no w\bw has been given since the last buffer alteration.
+
+ f\bf _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The filename command prints the currently remembered file name. If
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is given, the currently remembered file name is changed to
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.
+
+ (_\b1,_\b$)g\bg_\b/_\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b/c\bco\bom\bmm\bma\ban\bnd\bd l\bli\bis\bst\bt
+ In the global command, the first step is to mark every line which
+ matches the given regular expression. Then for every such line,
+ the given command list is executed with In the global command, the
+ first step is to mark every line which matches the given regular
+ expression. Then for every such line, the given command list is
+ executed with `_\b.' 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 be ended with `\\b\' A\bA, i\bi, and c\bc commands and associated in-
+ put are permitted; the `_\b.' terminating input mode may be omitted if
+ it would be on the last line of the command list. The commands g\bg
+ and v\bv are not permitted in the command list.
+
+ (_\b.)i\bi
+ <text>
+ .\b.
+ This command inserts the given text before the addressed line. `_\b.'
+ is left at the last line input, or, if there were none, at the line
+ before the addressed line. This command differs from the a\ba command
+ only in the placement of the text.
+
+ (_\b.,_\b._\b+_\b1)j\bj
+ This command joins the addressed lines into a single line; interme-
+ diate newlines simply disappear. `_\b.' is left at the resulting
+ line.
+
+ (_\b.)k\bk_\bx
+ The mark command marks the addressed line with name _\bx, which must
+ be a lower-case letter. The address form _\b'_\bx then addresses this
+ line.
+
+ (_\b.,_\b.)l\bl
+ The list command prints the addressed lines in an unambiguous way:
+ non-graphic characters are printed in two-digit octal, and long
+ lines are folded. The _\bl command may be placed on the same line af-
+ ter any non-i/o command.
+
+ (_\b.,_\b.)m\bm_\ba
+ The move command repositions the addressed lines after the line ad-
+ dressed by `_\ba'. The last of the moved lines becomes the current
+ line.
+
+ (_\b.,_\b.)p\bp
+ The print command prints the addressed lines. `_\b.' is left at the
+ last line printed. The p\bp command may be placed on the same line
+ after any non-i/o command.
+
+ (_\b.,_\b.)P\bP
+ This command is a synonym for p\bp.
+
+ q\bq The quit command causes e\bed\bd to exit. No automatic write of a file
+ is done.
+
+
+
+ Q\bQ This command is the same as q\bq, except that no diagnostic results
+ when no w\bw has been given since the last buffer alteration.
+
+ (_\b$,_\b.)r\br _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The read command reads in the given file after the addressed line.
+ If no file name is given, the remembered file name, if any, is used
+ (see e\be and f\bf commands). The file name is remembered if there was
+ no remembered file name already. Address `0' is legal for r\br 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. `_\b.' is
+ left at the last line read in from the file.
+
+ (_\b1,_\b$)g\bg_\b/_\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b/r\bre\bep\bpl\bla\bac\bce\bem\bme\ben\bnt\bt l\bli\bis\bst\bt or,
+ (_\b1,_\b$)g\bg_\b/_\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b/r\bre\bep\bpl\bla\bac\bce\bem\bme\ben\bnt\bt l\bli\bis\bst\bt/\b/g\bg
+ The substitute command searches each addressed line for an occur-
+ rence of the specified regular expression. On each line in which a
+ match is found, all matched strings are replaced by the replacement
+ specified, if the global replacement indicator g\bg 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 punctuation
+ character may be used instead of `/\b/' to delimit the regular expres-
+ sion and the replacement. `_\b.' is left at the last line substitut-
+ ed. An ampersand `&\b&' appearing in the replacement is replaced by
+ the string matching the regular expression. The special meaning of
+ `&\b&' in this context may be suppressed by preceding it by `\\b\' The
+ characters `\\b\_\bn' where _\bn is a digit, are replaced by the text
+ matched by the regular subexpression enclosed between _\bn`' and `\\b\)\b)'
+ When nested, parenthesized subexpressions are present, _\bn is deter-
+ mined by counting occurrences of `\\b\(\b(' starting from the left.
+ Lines may be split by substituting new-line characters into them.
+ The new-line in the replacement string must be escaped by preceding
+ it by `\\b\' One or two trailing delimiters may be omitted, implying
+ the p\bp suffix. The special form s\bs followed by _\bn_\bo delimiters repeats
+ the most recent substitute command on the addressed lines. The s\bs
+ may be followed by the letters r\br (use the most recent regular ex-
+ pression for the left hand side, instead of the most recent left
+ hand side of a substitute command), p\bp (complement the setting of
+ the p\bp suffix from the previous substitution), or g\bg (complement the
+ setting of the g\bg suffix). These letters may be combined in any or-
+ der.
+
+ (_\b.,_\b.)t\bt_\ba
+ This command acts just like the m\bm command, except that a copy of
+ the addressed lines is placed after address _\ba (which may be 0).
+ `_\b.' is left on the last line of the copy.
+
+ (_\b.,_\b.)u\bu
+ The undo command restores the buffer to it's state before the most
+ recent buffer modifying command. The current line is also re-
+ stored. Buffer modifying commands are a\ba, c\bc, d\bd, g\bg, i\bi, k\bk, m\bm, r\br, s\bs,
+ t\bt, and v\bv. For purposes of undo, g\bg and v\bv are considered to be a sin-
+ gle buffer modifying command. Undo is its own inverse. When e\bed\bd
+ runs out of memory (at about 8000 lines on any 16 bit mini-computer
+ such as the PDP-11) This full undo is not possible, and u\bu can only
+ undo the effect of the most recent substitute on the current line.
+ This restricted undo also applies to editor scripts when e\bed\bd is in-
+ voked with the -\b- option.
+
+ (_\b1,_\b$)v\bv_\b/_\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b/c\bco\bom\bmm\bma\ban\bnd\bd l\bli\bis\bst\bt
+ This command is the same as the global command g\bg except that the
+ command list is executed g\bg with `_\b.' initially set to every line
+ _\be_\bx_\bc_\be_\bp_\bt those matching the regular expression.
+
+
+
+ (_\b1,_\b$)w\bw _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The write command writes the addressed lines onto the given file.
+ If the file does not exist, it is created. The file name is remem-
+ bered if there was no remembered file name already. If no file
+ name is given, the remembered file name, if any, is used (see e\be and
+ f\bf commands). `_\b.' is unchanged. If the command is successful, the
+ number of characters written is printed.
+
+ (_\b1,_\b$)W\bW _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ This command is the same as w\bw, except that the addressed lines are
+ appended to the file.
+
+ (_\b1,_\b$)w\bwq\bq _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ This command is the same as w\bw except that afterwards a q\bq command is
+ done, exiting the editor after the file is written.
+
+ (_\b._\b+_\b1)z\bz or,
+ (_\b._\b+_\b1)z\bz_\bn
+ This command scrolls through the buffer starting at the addressed
+ line. 22 (or _\bn, if given) lines are printed. The last line print-
+ ed becomes the current line. The value _\bn is sticky, in that it be-
+ comes the default for future z\bz commands.
+
+ (_\b$)=\b= The line number of the addressed line is typed. `_\b.' is unchanged
+ by this command.
+
+ _\b!<shell command>
+ The remainder of the line after the `!\b!' is sent to sh(1) to be in-
+ terpreted as a command. `_\b.' is unchanged.
+
+ (_\b._\b+_\b1,_\b._\b+_\b1)<newline>
+ An address alone on a line causes the addressed line to be printed.
+ A blank line alone is equivalent to _\b._\b+_\b1 it is useful for stepping
+ through text. If two addresses are present with no intervening
+ semicolon, e\bed\bd prints the range of lines. If they are separated by
+ a semicolon, the second line is printed.
+
+ If an interrupt signal (ASCII DEL) is sent, e\bed\bd prints `?interrupted' and
+ returns to its command level.
+
+ Some size limitations: 512 characters per line, 256 characters per global
+ command list, 64 characters per file name, and, on mini computers, 128K
+ characters in the temporary file. The limit on the number of lines de-
+ pends on the amount of core: each line takes 2 words.
+
+ When reading a file, e\bed\bd discards ASCII NUL characters and all characters
+ after the last newline. It refuses to read files containing non- ASCII
+ characters.
+
+F\bFI\bIL\bLE\bES\bS
+ /tmp/e*
+ edhup work is saved here if terminal hangs up
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ ex(1), sed(1), crypt(1)
+ B. W. Kernighan, _\bA _\bT_\bu_\bt_\bo_\br_\bi_\ba_\bl _\bI_\bn_\bt_\br_\bo_\bd_\bu_\bc_\bt_\bi_\bo_\bn _\bt_\bo _\bt_\bh_\be _\bE_\bD _\bT_\be_\bx_\bt _\bE_\bd_\bi_\bt_\bo_\br
+ B. W. Kernighan, _\bA_\bd_\bv_\ba_\bn_\bc_\be_\bd _\be_\bd_\bi_\bt_\bi_\bn_\bg _\bo_\bn _\bU_\bN_\bI_\bX
+
+H\bHI\bIS\bST\bTO\bOR\bRY\bY
+ The e\bed\bd command appeared in
+
+D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bCS\bS
+ `name' for inaccessible file; `?self-explanatory message' for other er-
+ rors.
+
+
+ To protect against throwing away valuable work, a q\bq or e\be command is con-
+ sidered to be in error, unless a w\bw has occurred since the last buffer
+ change. A second q\bq or e\be will be obeyed regardless.
+
+B\bBU\bUG\bGS\bS
+ The l\bl command mishandles DEL.
+ The u\bun\bnd\bdo\bo command causes marks to be lost on affected lines.
+ The special treatment of hangups only works on UNIX.
+
+AT&T 7th Edition August 19, 1993 7