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