Annotation of cci/usr/src/man/man1/ed.1, revision 1.1.1.1

1.1       root        1: .TH ED 1 "14 September 1979"
                      2: .UC
                      3: .if t .ds q \(aa
                      4: .if n .ds q '
                      5: .SH NAME
                      6: ed \- text editor
                      7: .SH SYNOPSIS
                      8: .B ed
                      9: [
                     10: .B \-
                     11: ] [
                     12: .B \-x
                     13: ] [ name ]
                     14: .SH DESCRIPTION
                     15: .I Ed
                     16: is the standard text editor.
                     17: .PP
                     18: If a
                     19: .I name
                     20: argument is given,
                     21: .I ed
                     22: simulates an
                     23: .I e
                     24: command (see below)\| on the named file; that is to say,
                     25: the file is read into
                     26: .I ed's
                     27: buffer so that it can be edited.
                     28: If 
                     29: .B \-x
                     30: is present, an
                     31: .I x
                     32: command is simulated first to handle an encrypted file.
                     33: The optional
                     34: .B \-
                     35: suppresses the printing
                     36: of explanatory output
                     37: and should be used
                     38: when the standard input is
                     39: an editor script.
                     40: .PP
                     41: .I Ed
                     42: operates on a copy of any file it is editing; changes made
                     43: in the copy have no effect on the file until a
                     44: .IR w ""
                     45: (write)\|
                     46: command is given.
                     47: The copy of the text being edited resides
                     48: in a temporary file called the 
                     49: .IR buffer .
                     50: .PP
                     51: Commands to
                     52: .I ed
                     53: have a simple and regular structure: zero or
                     54: more
                     55: .I addresses
                     56: followed by a single character
                     57: .I command,
                     58: possibly
                     59: followed by parameters to the command.
                     60: These addresses specify one or more lines in the buffer.
                     61: Missing addresses are supplied by default.
                     62: .PP
                     63: In general, only one command may appear on a line.
                     64: Certain commands allow the 
                     65: addition of text to the buffer.
                     66: While
                     67: .I ed
                     68: is accepting text, it is said
                     69: to be in
                     70: .I  "input mode."
                     71: In this mode, no commands are recognized;
                     72: all input is merely collected.
                     73: Input mode is left by typing a period `\fB.\fR' alone at the
                     74: beginning of a line.
                     75: .PP
                     76: .I Ed
                     77: supports a limited form of
                     78: .I "regular expression"
                     79: notation.
                     80: A regular expression specifies
                     81: a set of strings of characters.
                     82: A member of this set of strings is said to be
                     83: .I matched
                     84: by the regular expression.
                     85: In the following specification for regular expressions
                     86: the word `character' means any character but newline.
                     87: .IP 1.
                     88: Any character except a special character
                     89: matches itself.
                     90: Special characters are
                     91: the regular expression delimiter plus
                     92: .RB \e\|[\| .
                     93: and sometimes ^\|*\|$.
                     94: .IP 2.
                     95: A
                     96: .B .
                     97: matches any character.
                     98: .IP 3.
                     99: A \e followed by any character except a digit or (\|) matches that character.
                    100: .IP 4.
                    101: A nonempty string
                    102: .I s
                    103: bracketed
                    104: .RI [ \|s\| ]
                    105: (or
                    106: .RI [^ s\| ])
                    107: matches any character in (or not in)
                    108: .I s.
                    109: In 
                    110: .I s,
                    111: \e has no special meaning, and ] may only appear as
                    112: the first letter.
                    113: A substring 
                    114: .I a\-b,
                    115: with
                    116: .I a
                    117: and
                    118: .I b
                    119: in ascending ASCII order, stands for the inclusive
                    120: range of ASCII characters.
                    121: .IP 5.
                    122: A regular expression of form 1-4 followed by * matches a sequence of
                    123: 0 or more matches of the regular expression.
                    124: .IP 6.
                    125: A regular expression,
                    126: .I x,
                    127: of form 1-8, bracketed
                    128: .RI \e( \|x\| \e)
                    129: matches what
                    130: .I x
                    131: matches.
                    132: .IP 7.
                    133: A \e followed by a digit 
                    134: .I n
                    135: matches a copy of the string that the
                    136: bracketed regular expression beginning with the
                    137: .IR n th
                    138: \e( matched.
                    139: .IP 8.
                    140: A regular expression of form 1-8,
                    141: .I x,
                    142: followed by a regular expression of form 1-7,
                    143: .I y
                    144: matches a match for
                    145: .I x
                    146: followed by a match for
                    147: .I y,
                    148: with the
                    149: .I x
                    150: match being as long as possible while still permitting a
                    151: .I y
                    152: match.
                    153: .IP 9.
                    154: A regular expression of form 1-8 preceded by ^
                    155: (or followed by $), is constrained to matches that
                    156: begin at the left (or end at the right) end of a line.
                    157: .IP 10.
                    158: A regular expression of form 1-9 picks out the
                    159: longest among the leftmost matches in a line.
                    160: .IP 11.
                    161: An empty regular expression stands for a copy of the
                    162: last regular expression encountered.
                    163: .PP
                    164: Regular expressions are used in addresses to specify
                    165: lines and in one command
                    166: (see
                    167: .I s
                    168: below)\|
                    169: to specify a portion of a line which is to be replaced.
                    170: If it is desired to use one of
                    171: the regular expression metacharacters as an ordinary
                    172: character, that character may be preceded by `\e'.
                    173: This also applies to the character bounding the regular
                    174: expression (often `/')\| and to `\e' itself.
                    175: .PP
                    176: To understand addressing in
                    177: .I ed
                    178: it is necessary to know that at any time there is a
                    179: .I  "current line."
                    180: Generally speaking, the current line is
                    181: the last line affected by a command; however,
                    182: the exact effect on the current line
                    183: is discussed under the description of
                    184: the command.
                    185: Addresses are constructed as follows.
                    186: .TP
                    187: 1.
                    188: The character `\fB.\fR' addresses the current line.
                    189: .TP
                    190: 2.
                    191: The character `$' addresses the last line of the buffer.
                    192: .TP
                    193: 3.
                    194: A decimal number
                    195: .I n
                    196: addresses the
                    197: .IR n -th
                    198: line of the buffer.
                    199: .TP
                    200: 4.
                    201: `\(fm\fIx\fR' addresses the line marked with the name
                    202: .IR x ,
                    203: which must be a lower-case letter.
                    204: Lines are marked with the
                    205: .I k
                    206: command described below.
                    207: .TP
                    208: 5.
                    209: A regular expression enclosed in slashes `/' addresses
                    210: the line found by searching forward from the current line
                    211: and stopping at the first line containing a
                    212: string that matches the regular expression.
                    213: If necessary the search wraps around to the beginning of the
                    214: buffer.
                    215: .TP
                    216: 6.
                    217: A regular expression enclosed in queries `?' addresses
                    218: the line found by searching backward from the current line
                    219: and stopping at the first line containing
                    220: a string that matches the regular expression.
                    221: If necessary
                    222: the search wraps around to the end of the buffer.
                    223: .TP
                    224: 7.
                    225: An address followed by a plus sign `+'
                    226: or a minus sign `\-' followed by a decimal number specifies that address plus
                    227: (resp. minus)\| the indicated number of lines.
                    228: The plus sign may be omitted.
                    229: .TP
                    230: 8.
                    231: If an address begins with `+' or `\-'
                    232: the addition or subtraction is taken with respect to the current line;
                    233: e.g. `\-5' is understood to mean `\fB.\fR\-5'.
                    234: .TP
                    235: 9.
                    236: If an address ends with `+' or `\-',
                    237: then 1 is added (resp. subtracted).
                    238: As a consequence of this rule and rule 8,
                    239: the address `\-' refers to the line before the current line.
                    240: Moreover,
                    241: trailing
                    242: `+' and `\-' characters
                    243: have cumulative effect, so `\-\-' refers to the current
                    244: line less 2.
                    245: .TP
                    246: 10.
                    247: To maintain compatibility with earlier versions of the editor,
                    248: the character `^' in addresses is 
                    249: equivalent to `\-'.
                    250: .PP
                    251: Commands may require zero, one, or two addresses.
                    252: Commands which require no addresses regard the presence
                    253: of an address as an error.
                    254: Commands which accept one or two addresses
                    255: assume default addresses when insufficient are given.
                    256: If more addresses are given than such a command requires,
                    257: the last one or two (depending on what is accepted)\| are used.
                    258: .PP
                    259: Addresses are separated from each other typically by a comma
                    260: `\fB,\fR'.
                    261: They may also be separated by a semicolon
                    262: `\fB;\fR'.
                    263: In this case the current line `\fB.\fR' is set to
                    264: the previous address before the next address is interpreted.
                    265: This feature can be used to determine the starting
                    266: line for forward and backward searches (`/', `?')\|.
                    267: The second address of any two-address sequence
                    268: must correspond to a line following the line corresponding to the first address.
                    269: The special form `%'
                    270: is an abbreviation for the address pair `1,$'.
                    271: .PP
                    272: In the following list of
                    273: .I ed
                    274: commands, the default addresses
                    275: are shown in parentheses.
                    276: The parentheses are not part of
                    277: the address, but are used to show that the given addresses are
                    278: the default.
                    279: .PP
                    280: As mentioned, it is generally illegal for more than one
                    281: command to appear on a line.
                    282: However, most commands may be suffixed by `p'
                    283: or by `l', in which case
                    284: the current line is either
                    285: printed or listed respectively
                    286: in the way discussed below.
                    287: Commands may also be suffixed by `n',
                    288: meaning the output of the command is to
                    289: be line numbered.
                    290: These suffixes may be combined in any order.
                    291: .TP 5
                    292: .RB (\| .\| )\|a
                    293: .br
                    294: .ns
                    295: .TP 5
                    296: <text>
                    297: .br
                    298: .ns
                    299: .TP 5
                    300: .B .
                    301: .br
                    302: The append command reads the given text
                    303: and appends it after the addressed line.
                    304: `\fB.\fR' is left
                    305: on the last line input, if there
                    306: were any, otherwise at the addressed line.
                    307: Address `0' is legal for this command; text is placed
                    308: at the beginning of the buffer.
                    309: .TP 5
                    310: .RB (\| .\| ,\  .\| )\|c
                    311: .br
                    312: .ns
                    313: .TP 5
                    314: <text>
                    315: .br
                    316: .ns
                    317: .TP 5
                    318: .B .
                    319: .br
                    320: The change
                    321: command deletes the addressed lines, then accepts input
                    322: text which replaces these lines.
                    323: `\fB.\fR' is left at the last line input; if there were none,
                    324: it is left at the line preceding the deleted lines.
                    325: .TP 5
                    326: .RB (\| .\| ,\  .\| )\|d
                    327: The delete command deletes the addressed lines from the buffer.
                    328: The line originally after the last line deleted becomes the current line;
                    329: if the lines deleted were originally at the end,
                    330: the new last line becomes the current line.
                    331: .TP 5
                    332: e filename
                    333: The edit
                    334: command causes the entire contents of the buffer to be deleted,
                    335: and then the named file to be read in.
                    336: `\fB.\fR' is set to the last line of the buffer.
                    337: The number of characters read is typed.
                    338: `filename' is remembered for possible use as a default file name
                    339: in a subsequent
                    340: .I r
                    341: or
                    342: .I w
                    343: command.
                    344: If `filename' is missing, the remembered name is used.
                    345: .TP 5
                    346: E filename
                    347: This command is the same as
                    348: .I e,
                    349: except that no diagnostic results when no
                    350: .I w
                    351: has been given since the last buffer alteration.
                    352: .TP 5
                    353: f filename
                    354: The filename command prints the currently remembered file name.
                    355: If `filename' is given,
                    356: the currently remembered file name is changed to `filename'.
                    357: .TP 5
                    358: (1,$)\|g/regular expression/command list
                    359: In the global
                    360: command, the first step is to mark every line which matches
                    361: the given regular expression.
                    362: Then for every such line, the
                    363: given command list is executed with `\fB.\fR' initially set to that line.
                    364: A single command or the first of multiple commands
                    365: appears on the same line with the global command.
                    366: All lines of a multi-line list except the last line must be ended with `\e'.
                    367: .I A,
                    368: .I i,
                    369: and
                    370: .I c
                    371: commands and associated input are permitted;
                    372: the `\fB.\fR' terminating input mode may be omitted if it would be on the
                    373: last line of the command list.
                    374: The commands
                    375: .I g
                    376: and
                    377: .I v
                    378: are not permitted in the command list.
                    379: .TP 5
                    380: .RB (\| .\| )\|i
                    381: .ns
                    382: .TP 5
                    383: <text>
                    384: .br
                    385: .ns
                    386: .TP 5
                    387: .B .
                    388: .br
                    389: This command inserts the given text before the addressed line.
                    390: `\fB.\fR' is left at the last line input, or, if there were none,
                    391: at the line before the addressed line.
                    392: This command differs from the
                    393: .I a
                    394: command only in the placement of the
                    395: text.
                    396: .TP 5
                    397: .RB (\| .\| ,\  . +1)\|j
                    398: This command joins the addressed lines into a single line;
                    399: intermediate newlines simply disappear.
                    400: `\fB.\fR' is left at the resulting line.
                    401: .TP 5
                    402: ( \fB. \fR)\|k\fIx\fR
                    403: The mark command marks the addressed line with
                    404: name
                    405: .I x,
                    406: which must be a lower-case letter.
                    407: The address form `\(fm\fIx\fR' then addresses this line.
                    408: .ne 2.5
                    409: .TP 5
                    410: .RB (\| .\| ,\  .\| )\|l
                    411: The list command
                    412: prints the addressed lines in an unambiguous way:
                    413: non-graphic characters are
                    414: printed in two-digit octal,
                    415: and long lines are folded.
                    416: The
                    417: .I l
                    418: command may be placed on the same line after any non-i/o
                    419: command.
                    420: .TP 5
                    421: .RB (\| .\| ,\  .\| )\|m\fIa
                    422: The move command repositions the addressed lines after the line
                    423: addressed by
                    424: .IR a .
                    425: The last of the moved lines becomes the current line.
                    426: .TP 5
                    427: .RB (\| .\| ,\  .\| )\|p
                    428: The print command prints the addressed lines.
                    429: `\fB.\fR'
                    430: is left at the last line printed.
                    431: The
                    432: .I p
                    433: command
                    434: may
                    435: be placed on the same line after any non-i/o command.
                    436: .TP
                    437: .RB (\| .\| ,\  .\| )\|P
                    438: This command is a synonym for
                    439: .I p.
                    440: .TP 5
                    441: q
                    442: The quit command causes
                    443: .I ed
                    444: to exit.
                    445: No automatic write
                    446: of a file is done.
                    447: .TP 5
                    448: Q
                    449: This command is the same as
                    450: .I q,
                    451: except that no diagnostic results when no
                    452: .I w
                    453: has been given since the last buffer alteration.
                    454: .TP 5
                    455: ($)\|r filename
                    456: The read command
                    457: reads in the given file after the addressed line.
                    458: If no file name is given,
                    459: the remembered file name, if any, is used
                    460: (see
                    461: .I e
                    462: and
                    463: .I f
                    464: commands)\|.
                    465: The file name is remembered if there was no
                    466: remembered file name already.
                    467: Address `0' is legal for
                    468: .I r
                    469: and causes the
                    470: file to be read at the beginning of the buffer.
                    471: If the read is successful, the number of characters
                    472: read is typed.
                    473: `\fB.\fR' is left at the last line read in from the file.
                    474: .TP 5
                    475: (\| \fB.\fR\|, \fB.\fR\|)\|s/regular expression/replacement/       or,
                    476: .br
                    477: .ns
                    478: .TP 5
                    479: (\| \fB.\fR\|, \fB.\fR\|)\|s/regular expression/replacement/g
                    480: The substitute command searches each addressed
                    481: line for an occurrence of the specified regular expression.
                    482: On each line in which a match is found,
                    483: all matched strings are replaced by the replacement specified,
                    484: if the global replacement indicator `g' appears after the command.
                    485: If the global indicator does not appear, only the first occurrence
                    486: of the matched string is replaced.
                    487: It is an error for the substitution to fail on all addressed lines.
                    488: Any punctuation character
                    489: may be used instead of `/' to delimit the regular expression
                    490: and the replacement.
                    491: `\fB.\fR' is left at the last line substituted.
                    492: .IP
                    493: An ampersand `&' appearing in the replacement
                    494: is replaced by the string matching the regular expression.
                    495: The special meaning of `&' in this context may be
                    496: suppressed by preceding it by `\e'.
                    497: The characters
                    498: .I `\|\en'
                    499: where
                    500: .I n
                    501: is a digit,
                    502: are replaced by the text matched by the
                    503: .IR n -th
                    504: regular subexpression
                    505: enclosed between `\e(' and `\e)'.
                    506: When
                    507: nested, parenthesized subexpressions
                    508: are present,
                    509: .I n
                    510: is determined by counting occurrences of `\e(' starting from the left.
                    511: .IP
                    512: Lines may be split by substituting new-line characters into them.
                    513: The new-line in the
                    514: replacement string
                    515: must be escaped by preceding it by `\e'.
                    516: .IP
                    517: One or two trailing delimiters may be omitted,
                    518: implying the `p' suffix.
                    519: The special form `s' followed by
                    520: .I no
                    521: delimiters
                    522: repeats the most recent substitute command
                    523: on the addressed lines.
                    524: The `s' may be followed by the letters
                    525: .B r
                    526: (use the most recent regular expression for the
                    527: left hand side, instead of the most recent
                    528: left hand side of a substitute command),
                    529: .B p
                    530: (complement the setting of the
                    531: .I p
                    532: suffix from the previous substitution), or
                    533: .B g
                    534: (complement the setting of the
                    535: .I g
                    536: suffix).
                    537: These letters may be combined in any order.
                    538: .TP 5
                    539: .RB (\| .\| ,\  .\| )\|t\|\fIa
                    540: This command acts just like the
                    541: .I m
                    542: command, except that a copy of the addressed lines is placed
                    543: after address
                    544: .I a
                    545: (which may be 0).
                    546: `\fB.\fR' is left on the last line of the copy.
                    547: .TP 5
                    548: .RB (\| .\| ,\  .\| )\|u
                    549: The undo command restores the buffer to it's state
                    550: before the most recent buffer modifying command.
                    551: The current line is also restored.
                    552: Buffer modifying commands are
                    553: .I a, c, d, g, i, k, m, r, s, t,
                    554: and
                    555: .I v.
                    556: For purposes of undo,
                    557: .I g
                    558: and
                    559: .I v
                    560: are considered to be a single buffer modifying command.
                    561: Undo is its own inverse.
                    562: .IP
                    563: When
                    564: .I ed
                    565: runs out of memory
                    566: (at about 8000 lines on any 16 bit mini-computer
                    567: such as the PDP-11)
                    568: This full undo is not possible, and
                    569: .I u
                    570: can only undo the effect of the most recent
                    571: substitute on the current line.
                    572: This restricted undo also applies to editor scripts
                    573: when
                    574: .I ed
                    575: is invoked with the
                    576: .B -
                    577: option.
                    578: .TP 5
                    579: (1, $)\|v/regular expression/command list
                    580: This command is the same as the global command
                    581: .I g
                    582: except that the command list is executed
                    583: .I g
                    584: with `\fB.\fR' initially set to every line
                    585: .I except
                    586: those
                    587: matching the regular expression.
                    588: .TP 5
                    589: (1, $)\|w filename
                    590: .br
                    591: The write command writes the addressed lines onto
                    592: the given file.
                    593: If the file does not exist,
                    594: it is created.
                    595: The file name is remembered if there was no 
                    596: remembered file name already.
                    597: If no file name is given,
                    598: the remembered file name, if any, is used
                    599: (see
                    600: .I e
                    601: and
                    602: .I f
                    603: commands)\|.
                    604: `\fB.\fR' is unchanged.
                    605: If the command is successful, the number of characters written is
                    606: printed.
                    607: .TP
                    608: (1, $)\|W filename
                    609: This command is the same as
                    610: .I w,
                    611: except that the addressed lines are appended to the file.
                    612: .TP 5
                    613: (1, $)\|wq filename
                    614: This command is the same as
                    615: .I w
                    616: except that afterwards a
                    617: .I q
                    618: command is done,
                    619: exiting the editor
                    620: after the file is written.
                    621: .TP 5
                    622: x
                    623: A key string is demanded from the standard input.
                    624: Later
                    625: .I r, e
                    626: and
                    627: .I w
                    628: commands will encrypt and decrypt the text 
                    629: with this key by the algorithm of 
                    630: .IR crypt (1).
                    631: An explicitly empty key turns off encryption.
                    632: .TP 5
                    633: ($)\|=
                    634: The line number of the addressed line is typed.
                    635: `\fB.\fR' is unchanged by this command.
                    636: .TP 5
                    637: !<shell command>
                    638: The remainder of the line after the `!' is sent
                    639: to
                    640: .IR sh (1)
                    641: to be interpreted as a command.
                    642: .RB ` . '
                    643: is unchanged.
                    644: .TP 5
                    645: .RB (\| . +1,\| . +1)\|<newline>
                    646: An address alone on a line causes the addressed line to be printed.
                    647: A blank line alone is equivalent to `.+1p'; it is useful
                    648: for stepping through text.
                    649: If two addresses are present with no
                    650: intervening semicolon,
                    651: .I ed
                    652: prints the range of lines.
                    653: If they are separated by a semicolon,
                    654: the second line is printed.
                    655: .PP
                    656: If an interrupt signal (ASCII DEL)\| is sent,
                    657: .I ed
                    658: prints `?interrupted'
                    659: and returns to its command level.
                    660: .PP
                    661: Some size limitations:
                    662: 512 characters per line,
                    663: 256 characters per global command list,
                    664: 64 characters per file name,
                    665: and, on mini computers,
                    666: 128K characters in the temporary file.
                    667: The limit on the number of lines depends on the amount of core:
                    668: each line takes 2 words.
                    669: .PP
                    670: When reading a file,
                    671: .I ed
                    672: discards ASCII NUL characters
                    673: and all characters after the last newline.
                    674: It refuses to read files containing non-ASCII characters.
                    675: .SH FILES
                    676: /tmp/e*
                    677: .br
                    678: edhup: work is saved here if terminal hangs up
                    679: .SH "SEE ALSO"
                    680: B. W. Kernighan,
                    681: .I
                    682: A Tutorial Introduction to the ED Text Editor
                    683: .br
                    684: B. W. Kernighan,
                    685: .I Advanced editing on UNIX
                    686: .br
                    687: ex(1), sed(1), crypt(1)
                    688: .SH DIAGNOSTICS
                    689: `?name' for inaccessible file;
                    690: `?self-explanatory message'
                    691: for other errors.
                    692: .PP
                    693: To protect against throwing away valuable work,
                    694: a
                    695: .I q
                    696: or
                    697: .I e
                    698: command is considered to be in error, unless a
                    699: .I w
                    700: has occurred since the last buffer change.
                    701: A second
                    702: .I q
                    703: or
                    704: .I e
                    705: will be obeyed regardless.
                    706: .SH BUGS
                    707: The 
                    708: .I l
                    709: command mishandles DEL.
                    710: .br
                    711: The
                    712: .I undo
                    713: command causes marks to be lost on affected lines.
                    714: .br
                    715: The
                    716: .I x
                    717: command,
                    718: .B -x
                    719: option,
                    720: and
                    721: special treatment of hangups
                    722: only work on UNIX.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.