|
|
1.1 root 1: .TH ED 1
2: .ds . (\|\fL.\fP\|)
3: .ds .. (\|\fL.,.\fP\|)
4: .ds 1$ (\|\fL1,$\fP\|)
5: .SH NAME
6: ed \- text editor
7: .SH SYNOPSIS
8: .B ed
9: [
10: .B -
11: ]
12: [
13: .B -o
14: ]
15: [
16: .I file
17: ]
18: .SH DESCRIPTION
19: .I Ed
20: is a venerable text editor.
21: .PP
22: If a
23: .I file
24: argument is given,
25: .I ed
26: simulates an
27: .L e
28: command (see below) on that file:
29: it is read into
30: .I ed's
31: buffer so that it can be edited.
32: The options are
33: .TP
34: .B -
35: Suppress the printing
36: of character counts by
37: .LR e ,
38: .LR r ,
39: and
40: .L w
41: commands and of the confirming
42: .L !
43: by
44: .L !
45: commands.
46: .TP
47: .B -o
48: (for output piping)
49: Write all output to the standard error file except writing by
50: .L w
51: commands.
52: If no
53: .I file
54: is given, make
55: .B /fd/1
56: the remembered file; see the
57: .L e
58: command below.
59: .PP
60: .I Ed
61: operates on a `buffer', a copy of the file it is editing;
62: changes made
63: in the buffer have no effect on the file until a
64: .L w
65: (write)
66: command is given.
67: The copy of the text being edited resides
68: in a temporary file called the
69: .IR buffer .
70: .PP
71: Commands to
72: .I ed
73: have a simple and regular structure: zero, one, or
74: two
75: .I addresses
76: followed by a single character
77: .IR command ,
78: possibly
79: followed by parameters to the command.
80: These addresses specify one or more lines in the buffer.
81: Missing addresses are supplied by default.
82: .PP
83: In general, only one command may appear on a line.
84: Certain commands allow the
85: addition of text to the buffer.
86: While
87: .I ed
88: is accepting text, it is said
89: to be in
90: .I "input mode."
91: In this mode, no commands are recognized;
92: all input is merely collected.
93: Input mode is left by typing a period
94: .L .
95: alone at the
96: beginning of a line.
97: .PP
98: .I Ed
99: supports the
100: .I "regular expression"
101: notation described in
102: .IR regexp (6).
103: Regular expressions are used in addresses to specify
104: lines and in one command
105: (see
106: .I s
107: below)
108: to specify a portion of a line which is to be replaced.
109: If it is desired to use one of
110: the regular expression metacharacters as an ordinary
111: character, that character may be preceded by
112: .RB ` \e '.
113: This also applies to the character bounding the regular
114: expression (often
115: .LR / )
116: and to
117: .L \e
118: itself.
119: .PP
120: To understand addressing in
121: .I ed
122: it is necessary to know that at any time there is a
123: .I "current line."
124: Generally, the current line is
125: the last line affected by a command; however,
126: the exact effect on the current line
127: is discussed under the description of
128: each command.
129: Addresses are constructed as follows.
130: .TP
131: 1.
132: The character
133: .LR . ,
134: customarily called `dot',
135: addresses the current line.
136: .TP
137: 2.
138: The character
139: .L $
140: addresses the last line of the buffer.
141: .TP
142: 3.
143: A decimal number
144: .I n
145: addresses the
146: .IR n -th
147: line of the buffer.
148: .TP
149: 4.
150: .BI \'x
151: addresses the line marked with the name
152: .IR x ,
153: which must be a lower-case letter.
154: Lines are marked with the
155: .L k
156: command.
157: .TP
158: 5.
159: A regular expression enclosed in slashes (
160: .LR / )
161: addresses
162: the line found by searching forward from the current line
163: and stopping at the first line containing a
164: string that matches the regular expression.
165: If necessary the search wraps around to the beginning of the
166: buffer.
167: .TP
168: 6.
169: A regular expression enclosed in queries
170: .L ?
171: addresses
172: the line found by searching backward from the current line
173: and stopping at the first line containing
174: a string that matches the regular expression.
175: If necessary
176: the search wraps around to the end of the buffer.
177: .TP
178: 7.
179: An address followed by a plus sign
180: .L +
181: or a minus sign
182: .L -
183: followed by a decimal number specifies that address plus
184: (resp. minus) the indicated number of lines.
185: The plus sign may be omitted.
186: .TP
187: 8.
188: An address followed by
189: .L +
190: (or
191: .LR - )
192: followed by a
193: regular expression enclosed in slashes specifies the first
194: matching line following (or preceding) that address.
195: The search wraps around if necessary.
196: The
197: .L +
198: may be omitted, so
199: .L 0/x/
200: addresses the
201: .I first
202: line in the buffer with an
203: .LR x .
204: Enclosing the regular expression in
205: .L ?
206: reverses the search direction.
207: .TP
208: 9.
209: If an address begins with
210: .L +
211: or
212: .L -
213: the addition or subtraction is taken with respect to the current line;
214: e.g.\&
215: .L -5
216: is understood to mean
217: .LR .-5 .
218: .TP
219: 10.
220: If an address ends with
221: .L +
222: or
223: .LR - ,
224: then 1 is added (resp. subtracted).
225: As a consequence of this rule and rule 9,
226: the address
227: .L -
228: refers to the line before the current line.
229: Moreover,
230: trailing
231: .L +
232: and
233: .L -
234: characters
235: have cumulative effect, so
236: .L --
237: refers to the current
238: line less 2.
239: .TP
240: 11.
241: To maintain compatibility with earlier versions of the editor,
242: the character
243: .L ^
244: in addresses is
245: equivalent to
246: .LR - .
247: .PP
248: Commands may require zero, one, or two addresses.
249: Commands which require no addresses regard the presence
250: of an address as an error.
251: Commands which accept one or two addresses
252: assume default addresses when insufficient are given.
253: If more addresses are given than a command requires,
254: the last one or two (depending on what is accepted) are used.
255: .PP
256: Addresses are separated from each other typically by a comma
257: .LR , .
258: They may also be separated by a semicolon
259: .LR ; .
260: In this case the current line
261: is set to
262: the previous address before the next address is interpreted.
263: If no address precedes a comma or semicolon, line 1 is assumed;
264: if no address follows, the last line of the buffer is assumed.
265: The second address of any two-address sequence
266: must correspond to a line following the line corresponding to the first address.
267: .PP
268: In the following list of
269: .I ed
270: commands, the default addresses
271: are shown in parentheses.
272: The parentheses are not part of
273: the address, but are used to show that the given addresses are
274: the default.
275: `Dot' means the current line.
276: .TP
277: .RB \*. \|a
278: .br
279: .ns
280: .TP
281: <text>
282: .br
283: .ns
284: .TP
285: .B .
286: Read the given text
287: and append it after the addressed line.
288: Dot is left
289: on the last line input, if there
290: were any, otherwise at the addressed line.
291: Address
292: .L 0
293: is legal for this command; text is placed
294: at the beginning of the buffer.
295: .TP
296: .RB \*(.. \|b [ +- ][\fIpagesize\fP][ pln\fR]
297: Browse.
298: Print a `page', normally 20 lines.
299: The optional
300: .L +
301: (default) or
302: .L -
303: specifies whether the next or previous
304: page is to be printed.
305: The optional
306: .I pagesize
307: is the number of lines in a page.
308: The optional
309: .LR p ,
310: .LR n ,
311: or
312: .L l
313: causes printing in the specified format, initially
314: .LR p .
315: Pagesize and format are remembered between
316: .L b
317: commands.
318: Dot is left at the last line displayed.
319: .TP
320: .RB \*(.. \|c
321: .br
322: .ns
323: .TP
324: <text>
325: .br
326: .ns
327: .TP
328: .B .
329: Change.
330: Delete the addressed lines, then accept input
331: text to replace these lines.
332: Dot is left at the last line input; if there were none,
333: it is left at the line preceding the deleted lines.
334: .TP
335: .RB \*(.. \|d
336: Delete the addressed lines from the buffer.
337: Dot is set to the line following the last line deleted, or to
338: the last line of the buffer if the deleted lines had no successor.
339: .TP
340: .BI e " filename"
341: Edit.
342: Delete the entire contents of the buffer;
343: then read the named file into the buffer.
344: Dot is set to the last line of the buffer.
345: The number of characters read is typed.
346: The file name is remembered for possible use in later
347: .LR e ,
348: .LR r ,
349: or
350: .L w
351: commands.
352: If
353: .I filename
354: is missing, the remembered name is used.
355: .TP
356: .BI E " filename"
357: Unconditional
358: .LR e ;
359: see
360: .RL ` q '
361: below.
362: .TP
363: .BI f " filename"
364: Print the currently remembered file name.
365: If
366: .I filename
367: is given,
368: the currently remembered file name is first changed to
369: .IR filename .
370: .TP
371: .RB \*(1$ \|g/\fIregular\ expression\fP/\fIcommand\ list\fP
372: .PD 0
373: .TP
374: .RB \*(1$ \|g/\fIregular\ expression\fP/
375: .TP
376: .RB \*(1$ \|g/\fIregular\ expression\fP
377: .PD
378: Global.
379: First mark every line which matches
380: the given
381: .I regular expression\f1.
382: Then for every such line, execute the
383: .I command list
384: with dot initially set to that line.
385: A single command or the first of multiple commands
386: appears on the same line with the global command.
387: All lines of a multi-line list except the last line must end with
388: .LR \e .
389: The
390: .RB \&` \&. \&'
391: terminating input mode for an
392: .LR a ,
393: .LR i ,
394: .L c
395: command may be omitted if it would be on the
396: last line of the command list.
397: The commands
398: .L g
399: and
400: .L v
401: are not permitted in the command list.
402: Any character other than space or newline may
403: be used instead of
404: .L /
405: to delimit the regular expression.
406: The second and third forms mean
407: .BI g/ regular\ expression /p \f1.
408: .TP
409: .RB (\| .\| ) \|i
410: .PD 0
411: .TP
412: <text>
413: .TP
414: .B .
415: Insert the given text before the addressed line.
416: Dot is left at the last line input, or, if there were none,
417: at the line before the addressed line.
418: This command differs from the
419: .I a
420: command only in the placement of the
421: text.
422: .PD
423: .TP
424: .RB (\| .,.+1 \|) \|j
425: Join the addressed lines into a single line;
426: intermediate newlines are deleted.
427: Dot is left at the resulting line.
428: .TP
429: .RB \*. \|k\fIx\fP
430: Mark the addressed line with name
431: .IR x ,
432: which must be a lower-case letter.
433: The address form
434: .BI \' x
435: then addresses this line.
436: .ne 2.5
437: .TP
438: .RB \*(.. \|l
439: List.
440: Print the addressed lines in an unambiguous way:
441: a tab is printed as
442: .LR \et ,
443: a backspace as
444: .LR \eb ,
445: backslashes as
446: .LR \e\e ,
447: and non-printing characters as
448: a backslash, an
449: .LR x ,
450: and four hexadecimal digits.
451: Long lines are folded,
452: with the second and subsequent sub-lines indented one tab stop.
453: If the last character in the line is a blank,
454: it is followed by
455: .LR \en .
456: An
457: .L l
458: may be appended, like
459: .LR p ,
460: to any non-I/O command.
461: .TP
462: .RB \*(.. \|m\fIa
463: Move.
464: Reposition the addressed lines after the line
465: addressed by
466: .IR a .
467: Dot is left at the last moved line.
468: .TP
469: .RB \*(.. \|n
470: Number.
471: Perform
472: .LR p ,
473: prefixing each line with its line number and a tab.
474: An
475: .L n
476: may be appended, like
477: .LR p ,
478: to any non-I/O command.
479: .TP
480: .RB \*(.. \|p
481: Print the addressed lines.
482: Dot is left at the last line printed.
483: A
484: .L p
485: appended to any non-I/O command causes the then current line
486: to be printed after the command is executed.
487: .TP
488: .RB \*(.. \|P
489: This command is a synonym for
490: .LR p .
491: .TP
492: .B q
493: Quit the editor.
494: No automatic write
495: of a file is done.
496: A
497: .L q
498: or
499: .L e
500: command is considered to be in error if the buffer has
501: been modified since the last
502: .LR w ,
503: .LR q ,
504: or
505: .L e
506: command.
507: .TP
508: .B Q
509: Quit unconditionally.
510: .TP
511: .RB ( $ )\|r\ \fIfilename\fP
512: Read in the given file after the addressed line.
513: If no
514: .I filename
515: is given, the remembered file name is used.
516: The file name is remembered if there were no
517: remembered file name already.
518: If the read is successful, the number of characters
519: read is printed.
520: Dot is left at the last line read from the file.
521: .TP
522: .RB \*(.. \|s\fIn\fP/\fIregular\ expression\fP/\fIreplacement\fP/
523: .PD 0
524: .TP
525: .RB \*(.. \|s\fIn\fP/\fIregular\ expression\fP/\fIreplacement\fP/g
526: .TP
527: .RB \*(.. \|s\fIn\fP/\fIregular\ expression\fP/\fIreplacement\fP
528: .PD
529: Substitute.
530: Search each addressed
531: line for an occurrence of the specified regular expression.
532: On each line in which
533: .I n
534: matches are found
535: .RI ( n
536: defaults to 1 if missing),
537: the
538: .IR n th
539: matched string is replaced by the replacement specified.
540: If the global replacement indicator
541: .L g
542: appears after the command,
543: all subsequent matches on the line are also replaced.
544: It is an error for the substitution to fail on all addressed lines.
545: Any character other than space or newline
546: may be used instead of
547: .L /
548: to delimit the regular expression
549: and the replacement.
550: Dot is left at the last line substituted.
551: The third form means
552: .BI s n / regular\ expression / replacement\fP/p\f1.
553: The second
554: .L /
555: may be omitted if the replacement is
556: empty.
557: .IP
558: An ampersand
559: .L &
560: appearing in the replacement
561: is replaced by the string matching the regular expression.
562: The characters
563: .BI \e n\f1,
564: where
565: .I n
566: is a digit,
567: are replaced by the text matched by the
568: .IR n -th
569: regular subexpression
570: enclosed between
571: .L (
572: and
573: .LR ) .
574: When
575: nested parenthesized subexpressions
576: are present,
577: .I n
578: is determined by counting occurrences of
579: .L (
580: starting from the left.
581: .IP
582: A literal
583: .LR & ,
584: .LR / ,
585: .L \e
586: or newline may be included in a replacement
587: by prefixing it with
588: .LR \e .
589: .TP
590: .RB \*(.. \|t\|\fIa
591: Transfer.
592: Copy the addressed lines
593: after the line addressed by
594: .IR a .
595: Dot is left at the last line of the copy.
596: .TP
597: .RB \*(.. \|u
598: Undo.
599: Restore the preceding contents
600: of the first addressed line (sic), which must be the last line
601: in which a substitution was made (double sic).
602: .TP
603: .RB \*(1$ \|v/\fIregular\ expression\fP/\fIcommand\ list\fP
604: This command is the same as the global command
605: .L g
606: except that the command list is executed with
607: dot initially set to every line
608: .I except
609: those
610: matching the regular expression.
611: .TP
612: .RB \*(1$ \|w " \fIfilename\fP"
613: Write the addressed lines to
614: the given file.
615: If the file does not exist,
616: it is created with mode 666 (readable and writable by everyone).
617: If no
618: .I filename
619: is given, the remembered file name, if any, is used.
620: The file name is remembered if there were no
621: remembered file name already.
622: Dot is unchanged.
623: If the write is successful, the number of characters written is
624: printed.
625: .TP
626: .RB \*(1$ \|W " \fIfilename\fP"
627: Perform
628: .LR w ,
629: but append to, instead of overwriting, any existing file contents.
630: .TP
631: .RB ( $ ) \|=
632: Print the line number of the addressed line.
633: Dot is unchanged.
634: .TP
635: .BI ! shell\ command
636: Send the remainder of the line after the
637: .L !
638: to
639: .IR rc (1)
640: to be interpreted as a command.
641: Dot is unchanged.
642: .TP
643: .RB (\| .+1 )\|<newline>
644: An address without a command is taken as a
645: .L p
646: command.
647: A terminal
648: .L /
649: may be omitted from the address.
650: A blank line alone is equivalent to
651: .LR .+1p ;
652: it is useful
653: for stepping through text.
654: .PP
655: If an interrupt signal
656: .SM (DEL)
657: is sent,
658: .I ed
659: prints a
660: .L ?
661: and returns to its command level.
662: .PP
663: When reading a file,
664: .I ed
665: discards
666: .SM NUL
667: characters
668: and all characters after the last newline.
669: .SH FILES
670: .B /tmp/e*
671: .br
672: .B ed.hup
673: \ \ work is saved here if terminal hangs up
674: .SH SOURCE
675: .B /sys/src/cmd/ed.c
676: .SH "SEE ALSO"
677: .IR sam (1),
678: .IR sed (1),
679: .IR regexp (6)
680: .SH DIAGNOSTICS
681: .BI ? name
682: for inaccessible file;
683: .L ?TMP
684: for temporary file overflow;
685: .L ?
686: for errors in commands or other overflows.
687: .rm .
688: .rm ..
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.