Remove building with NOCRYPTO option
[minix.git] / bin / ed / ed.1
blobc459197b3f9eade5d465e7b86c77657d9182be73
1 .\"     $NetBSD: ed.1,v 1.30.40.1 2018/04/08 06:04:08 snj Exp $
2 .\"     $OpenBSD: ed.1,v 1.42 2003/07/27 13:25:43 jmc Exp $
3 .\"
4 .\" Copyright (c) 1993 Andrew Moore, Talke Studio.
5 .\" All rights reserved.
6 .\"
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .Dd April 5, 2018
29 .Dt ED 1
30 .Os
31 .Sh NAME
32 .Nm ed
33 .Nd text editor
34 .Sh SYNOPSIS
35 .Nm
36 .Op Fl
37 .Op Fl ESsx
38 .Op Fl p Ar string
39 .Op Ar file
40 .Sh DESCRIPTION
41 .Nm
42 is a line-oriented text editor.
43 It is used to create, display, modify, and otherwise manipulate text files.
44 If invoked with a
45 .Ar file
46 argument, then a copy of
47 .Ar file
48 is read into the editor's buffer.
49 Changes are made to this copy and not directly to
50 .Ar file
51 itself.
52 Upon quitting
53 .Nm ,
54 any changes not explicitly saved with a
55 .Ic w
56 command are lost.
57 .Pp
58 Editing is done in two distinct modes:
59 .Em command
60 and
61 .Em input .
62 When first invoked,
63 .Nm
64 is in command mode.
65 In this mode, commands are read from the standard input and
66 executed to manipulate the contents of the editor buffer.
67 .Pp
68 A typical command might look like:
69 .Bd -literal -offset indent
70 ,s/old/new/g
71 .Ed
72 .Pp
73 which replaces all occurrences of the string
74 .Pa old
75 with
76 .Pa new .
77 .Pp
78 When an input command, such as
79 .Ic a
80 (append),
81 .Ic i
82 (insert),
84 .Ic c
85 (change) is given,
86 .Nm
87 enters input mode.
88 This is the primary means of adding text to a file.
89 In this mode, no commands are available;
90 instead, the standard input is written directly to the editor buffer.
91 Lines consist of text up to and including a newline character.
92 Input mode is terminated by entering a single period
93 .Pq Ql \&.
94 on a line.
95 .Pp
96 All
97 .Nm
98 commands operate on whole lines or ranges of lines; e.g.,
99 the
100 .Ic d
101 command deletes lines; the
102 .Ic m
103 command moves lines, and so on.
104 It is possible to modify only a portion of a line by means of replacement,
105 as in the example above.
106 However, even here, the
107 .Ic s
108 command is applied to whole lines at a time.
110 In general,
112 commands consist of zero or more line addresses, followed by a single
113 character command and possibly additional parameters; i.e.,
114 commands have the structure:
115 .Bd -literal -offset indent
116 [address [,address]]command[parameters]
119 The address(es) indicate the line or range of lines to be affected by the
120 command.
121 If fewer addresses are given than the command accepts, then
122 default addresses are supplied.
124 The options are as follows:
125 .Bl -tag -width Ds
126 .It Fl
127 Same as the
128 .Fl s
129 option (deprecated).
130 .It Fl E
131 Enables the use of extended regular expressions instead of the basic
132 regular expressions that are normally used.
133 .It Fl S
134 Disables using of the
135 .Dq !
136 command (execuring a subshell).
137 Intended to be used by batch jobs like
138 .Xr patch 1 .
139 .It Fl p Ar string
140 Specifies a command prompt.
141 This may be toggled on and off with the
142 .Ic P
143 command.
144 .It Fl s
145 Suppress diagnostics.
146 This should be used if
148 standard input is from a script.
149 .It Fl x
150 Prompt for an encryption key to be used in subsequent reads and writes
151 (see the
152 .Ic x
153 command).
154 .It Ar file
155 Specifies the name of a file to read.
157 .Ar file
158 is prefixed with a
159 bang
160 .Pq Ql \&! ,
161 then it is interpreted as a shell command.
162 In this case, what is read is the standard output of
163 .Ar file
164 executed via
165 .Xr sh 1 .
166 To read a file whose name begins with a bang, prefix the
167 name with a backslash
168 .Pq Ql \e .
169 The default filename is set to
170 .Ar file
171 only if it is not prefixed with a bang.
173 .Ss LINE ADDRESSING
174 An address represents the number of a line in the buffer.
176 maintains a
177 .Em current address
178 which is typically supplied to commands as the default address
179 when none is specified.
180 When a file is first read, the current address is set to the last line
181 of the file.
182 In general, the current address is set to the last line affected by a command.
184 A line address is
185 constructed from one of the bases in the list below, optionally followed
186 by a numeric offset.
187 The offset may include any combination of digits, operators (i.e.,
188 .Sq + ,
189 .Sq - ,
191 .Sq ^ ) ,
192 and whitespace.
193 Addresses are read from left to right, and their values are computed
194 relative to the current address.
196 One exception to the rule that addresses represent line numbers is the
197 address
198 .Em 0
199 (zero).
200 This means
201 .Dq before the first line ,
202 and is legal wherever it makes sense.
204 An address range is two addresses separated either by a comma or semi-colon.
205 The value of the first address in a range cannot exceed the
206 value of the second.
207 If only one address is given in a range,
208 then the second address is set to the given address.
209 If an
210 .Em n Ns No -tuple
211 of addresses is given where
212 .Em n \*[Gt] 2 ,
213 then the corresponding range is determined by the last two addresses in the
214 .Em n Ns No -tuple.
215 If only one address is expected, then the last address is used.
217 Each address in a comma-delimited range is interpreted relative to the
218 current address.
219 In a semi-colon-delimited range, the first address is
220 used to set the current address, and the second address is interpreted
221 relative to the first.
223 The following address symbols are recognized:
224 .Bl -tag -width Ds
225 .It Em \&.
226 The current line (address) in the buffer.
227 .It Em $
228 The last line in the buffer.
229 .It Em n
231 .Em n Ns No th
232 line in the buffer where
233 .Em n
234 is a number in the range
235 .Em [0,$] .
236 .It Em - No or Em ^
237 The previous line.
238 This is equivalent to
239 .Em -1
240 and may be repeated with cumulative effect.
241 .It Em -n No or Em ^n
243 .Em n Ns No th
244 previous line, where
245 .Em n
246 is a non-negative number.
247 .It Em +
248 The next line.
249 This is equivalent to
250 .Em +1
251 and may be repeated with cumulative effect.
252 .It Em +n
254 .Em n Ns No th
255 next line, where
256 .Em n
257 is a non-negative number.
258 .It Em whitespace Em n
259 .Em whitespace
260 followed by a number
261 .Em n
262 is interpreted as
263 .Sq Em +n .
264 .It Em \&, No or Em %
265 The first through last lines in the buffer.
266 This is equivalent to the address range
267 .Em 1,$ .
268 .It Em \&;
269 The current through last lines in the buffer.
270 This is equivalent to the address range
271 .Em .,$ .
272 .It Em / Ns Ar re Ns Em /
273 The next line containing the regular expression
274 .Ar re .
275 The search wraps to the beginning of the buffer and continues down to the
276 current line, if necessary.
277 .Em //
278 repeats the last search.
279 .It Em \&? Ns Ar re Ns Em \&?
280 The previous line containing the regular expression
281 .Ar re .
282 The search wraps to the end of the buffer and continues up to the
283 current line, if necessary.
284 .Em ??
285 repeats the last search.
286 .It Em \&\' Ns Ar lc
287 The line previously marked by a
288 .Ic k
289 (mark) command, where
290 .Ar lc
291 is a lower case letter.
293 .Ss REGULAR EXPRESSIONS
294 Regular expressions are patterns used in selecting text.
295 For example, the
297 command
298 .Bd -literal -offset indent
299 g/string/
302 prints all lines containing
303 .Em string .
304 Regular expressions are also used by the
305 .Ic s
306 command for selecting old text to be replaced with new.
308 In addition to specifying string literals, regular expressions can
309 represent classes of strings.
310 Strings thus represented are said to be matched by the
311 corresponding regular expression.
312 If it is possible for a regular expression to match several strings in
313 a line, then the leftmost longest match is the one selected.
315 The following symbols are used in constructing regular expressions:
316 .Bl -tag -width Dsasdfsd
317 .It Em c
318 Any character
319 .Em c
320 not listed below, including
321 .Sq { ,
322 .Sq } ,
323 .Sq \&( ,
324 .Sq \&) ,
325 .Sq \*[Lt] ,
327 .Sq \*[Gt]
328 matches itself.
329 .It Em \ec
330 Any backslash-escaped character
331 .Em c ,
332 except for
333 .Sq { ,
334 .Sq } ,
335 .Sq \&( ,
336 .Sq \&) ,
337 .Sq \*[Lt] ,
339 .Sq \*[Gt]
340 matches itself.
341 .It Em \&.
342 Matches any single character.
343 .It Em [char-class]
344 Matches any single character in the character class
345 .Em char-class .
347 .Sx CHARACTER CLASSES
348 below for further information.
349 .It Em [^char-class]
350 Matches any single character, other than newline, not in the
351 character class
352 .Em char-class .
353 .It Em ^
355 .Em ^
356 is the first character of a regular expression, then it
357 anchors the regular expression to the beginning of a line.
358 Otherwise, it matches itself.
359 .It Em $
361 .Em $
362 is the last character of a regular expression,
363 it anchors the regular expression to the end of a line.
364 Otherwise, it matches itself.
365 .It Em \e\*[Lt]
366 Anchors the single character regular expression or subexpression
367 immediately following it to the beginning of a word.
368 (This may not be available.)
369 .It Em \e\*[Gt]
370 Anchors the single character regular expression or subexpression
371 immediately following it to the end of a word.
372 (This may not be available.)
373 .It Em \e( Ns Ar re Ns Em \e)
374 Defines a subexpression
375 .Ar re .
376 Subexpressions may be nested.
377 A subsequent backreference of the form
378 .Em \en ,
379 where
380 .Em n
381 is a number in the range [1,9], expands to the text matched by the
382 .Em n Ns No th
383 subexpression.
384 For example, the regular expression
385 .Em \e(.*\e)\e1
386 matches any string consisting of identical adjacent substrings.
387 Subexpressions are ordered relative to their left delimiter.
388 .It Em *
389 Matches the single character regular expression or subexpression
390 immediately preceding it zero or more times.
392 .Em *
393 is the first character of a regular expression or subexpression,
394 then it matches itself.
396 .Em *
397 operator sometimes yields unexpected results.
398 For example, the regular expression
399 .Em b*
400 matches the beginning of the string
401 .Em abbb
402 (as opposed to the substring
403 .Em bbb ) ,
404 since a null match is the only leftmost match.
405 .Sm off
406 .It Em \e{ No n,m Em \e}\ \e{ No n, Em \e}\ \& Em \e{ No n Em \e}
407 .Sm on
408 Matches the single character regular expression or subexpression
409 immediately preceding it at least
410 .Em n
411 and at most
412 .Em m
413 times.
415 .Em m
416 is omitted, then it matches at least
417 .Em n
418 times.
419 If the comma is also omitted, then it matches exactly
420 .Em n
421 times.
424 Additional regular expression operators may be defined depending on the
425 particular
426 .Xr regex 3
427 implementation.
428 .Ss CHARACTER CLASSES
429 A character class specifies a set of characters. It is written within
430 square brackets
431 .Pq []
432 and in its most basic form contains just the characters in the set.
434 To include a
435 .Sq \&]
436 in a character class, it must be the first character.
437 A range of characters may be specified by separating the end characters
438 of the range with a
439 .Sq \&- ,
440 e.g.,
441 .Sq a-z
442 specifies the lower case characters.
444 The following literals can also be used within character classes as
445 shorthand for particular sets of characters:
446 .Bl -tag -offset indent -compact -width [:blahblah:]
447 .It [:alnum:]
448 Alphanumeric characters.
449 .It [:cntrl:]
450 Control characters.
451 .It [:lower:]
452 Lowercase alphabetic characters.
453 .It [:space:]
454 Whitespace (space, tab, newline, form feed, etc.)
455 .It [:alpha:]
456 Alphabetic characters.
457 .It [:digit:]
458 Numeric characters (digits).
459 .It [:print:]
460 Printable characters.
461 .It [:upper:]
462 Uppercase alphabetic characters.
463 .It [:blank:]
464 Blank characters (space and tab).
465 .It [:graph:]
466 Graphical characters (printing nonblank characters).
467 .It [:punct:]
468 Punctuation characters.
469 .It [:xdigit:]
470 Hexadecimal digits.
473 .Sq \&-
474 appears as the first or last character of a character class, then
475 it matches itself.
476 All other characters in a character class match themselves.
478 Patterns in
479 a character class
480 of the form
481 .Em [.col-elm.]
483 .Em [=col-elm=]
484 where
485 .Em col-elm
486 is a
487 .Em collating element
488 are interpreted according to
489 .Xr locale 5
490 (not currently supported).
492 .Xr regex 3
493 for an explanation of these constructs.
494 .Ss COMMANDS
497 commands are single characters, though some require additional parameters.
498 If a command's parameters extend over several lines, then
499 each line except for the last must be terminated with a backslash
500 .Pq Ql \e .
502 In general, at most one command is allowed per line.
503 However, most commands accept a print suffix, which is any of
504 .Ic p
505 (print),
506 .Ic l
507 (list),
509 .Ic n
510 (enumerate), to print the last line affected by the command.
512 An interrupt (typically ^C) has the effect of aborting the current command
513 and returning the editor to command mode.
516 recognizes the following commands.
517 The commands are shown together with
518 the default address or address range supplied if none is
519 specified (in parentheses), and other possible arguments on the right.
520 .Bl -tag -width Dxxs
521 .It (.) Ns Ic a
522 Appends text to the buffer after the addressed line.
523 Text is entered in input mode.
524 The current address is set to last line entered.
525 .It (.,.) Ns Ic c
526 Changes lines in the buffer.
527 The addressed lines are deleted from the buffer,
528 and text is appended in their place.
529 Text is entered in input mode.
530 The current address is set to last line entered.
531 .It (.,.) Ns Ic d
532 Deletes the addressed lines from the buffer.
533 If there is a line after the deleted range, then the current address is set
534 to this line.
535 Otherwise the current address is set to the line before the deleted range.
536 .It Ic e Ar file
537 Edits
538 .Ar file ,
539 and sets the default filename.
541 .Ar file
542 is not specified, then the default filename is used.
543 Any lines in the buffer are deleted before the new file is read.
544 The current address is set to the last line read.
545 .It Ic e Ar !command
546 Edits the standard output of
547 .Ar command ,
548 (see
549 .Ic \&! Ar command
550 below).
551 The default filename is unchanged.
552 Any lines in the buffer are deleted before the output of
553 .Em command
554 is read.
555 The current address is set to the last line read.
556 .It Ic E Ar file
557 Edits
558 .Ar file
559 unconditionally.
560 This is similar to the
561 .Ic e
562 command, except that unwritten changes are discarded without warning.
563 The current address is set to the last line read.
564 .It Ic f Ar file
565 Sets the default filename to
566 .Ar file .
568 .Ar file
569 is not specified, then the default unescaped filename is printed.
570 .It (1,$) Ns Ic g Ns Ar /re/command-list
571 Applies
572 .Ar command-list
573 to each of the addressed lines matching a regular expression
574 .Ar re .
575 The current address is set to the line currently matched before
576 .Ar command-list
577 is executed.
578 At the end of the
579 .Ic g
580 command, the current address is set to the last line affected by
581 .Ar command-list .
583 Each command in
584 .Ar command-list
585 must be on a separate line,
586 and every line except for the last must be terminated by a backslash
587 .Pq Sq \e .
588 Any commands are allowed, except for
589 .Ic g ,
590 .Ic G ,
591 .Ic v ,
593 .Ic V .
594 A newline alone in
595 .Ar command-list
596 is equivalent to a
597 .Ic p
598 command.
599 .It (1,$) Ns Ic G Ns Ar /re/
600 Interactively edits the addressed lines matching a regular expression
601 .Ar re .
602 For each matching line, the line is printed, the current address is set,
603 and the user is prompted to enter a
604 .Ar command-list .
605 At the end of the
606 .Ic G
607 command, the current address is set to the last line affected by (the last)
608 .Ar command-list .
610 The format of
611 .Ar command-list
612 is the same as that of the
613 .Ic g
614 command.
615 A newline alone acts as a null command list.
616 A single
617 .Sq \*[Am]
618 repeats the last non-null command list.
619 .It Ic H
620 Toggles the printing of error explanations.
621 By default, explanations are not printed.
622 It is recommended that
624 scripts begin with this command to aid in debugging.
625 .It Ic h
626 Prints an explanation of the last error.
627 .It (.) Ns Ic i
628 Inserts text in the buffer before the current line.
629 Text is entered in input mode.
630 The current address is set to the last line entered.
631 .It (.,.+1) Ns Ic j
632 Joins the addressed lines.
633 The addressed lines are deleted from the buffer and replaced by a single
634 line containing their joined text.
635 The current address is set to the resultant line.
636 .It (.) Ns Ic k Ns Ar lc
637 Marks a line with a lower case letter
638 .Ar lc .
639 The line can then be addressed as
640 .Ar \&'lc
641 (i.e., a single quote followed by
642 .Ar lc )
643 in subsequent commands.
644 The mark is not cleared until the line is deleted or otherwise modified.
645 .It (.,.) Ns Ic l
646 Prints the addressed lines unambiguously.
647 If a single line fills more than one screen (as might be the case
648 when viewing a binary file, for instance), a
649 .Dq --More--
650 prompt is printed on the last line.
652 waits until the RETURN key is pressed before displaying the next screen.
653 The current address is set to the last line printed.
654 .It (.,.) Ns Ic m Ns No (.)
655 Moves lines in the buffer.
656 The addressed lines are moved to after the
657 right-hand destination address, which may be the address
658 .Em 0
659 (zero).
660 The current address is set to the last line moved.
661 .It (.,.) Ns Ic n
662 Prints the addressed lines along with their line numbers.
663 The current address is set to the last line printed.
664 .It (.,.) Ns Ic p
665 Prints the addressed lines.
666 The current address is set to the last line printed.
667 .It Ic P
668 Toggles the command prompt on and off.
669 Unless a prompt was specified with the command-line option
670 .Fl p Ar string ,
671 the command prompt is by default turned off.
672 .It Ic q
673 Quits
674 .Nm .
675 .It Ic Q
676 Quits
678 unconditionally.
679 This is similar to the
680 .Ic q
681 command, except that unwritten changes are discarded without warning.
682 .It ($) Ns Ic r Ar file
683 Reads
684 .Ar file
685 to after the addressed line.
687 .Ar file
688 is not specified, then the default filename is used.
689 If there was no default filename prior to the command,
690 then the default filename is set to
691 .Ar file .
692 Otherwise, the default filename is unchanged.
693 The current address is set to the last line read.
694 .It ($) Ns Ic r Ar !command
695 Reads to after the addressed line the standard output of
696 .Ar command ,
697 (see the
698 .Ic \&!
699 command below).
700 The default filename is unchanged.
701 The current address is set to the last line read.
702 .Sm off
703 .It (.,.) Ic s Ar /re/replacement/ , \ (.,.) \
704 Ic s Ar /re/replacement/ Em g , Ar \ (.,.) \
705 Ic s Ar /re/replacement/ Em n
706 .Sm on
707 Replaces text in the addressed lines matching a regular expression
708 .Ar re
709 with
710 .Ar replacement .
711 By default, only the first match in each line is replaced.
712 If the
713 .Em g
714 (global) suffix is given, then every match to be replaced.
716 .Em n
717 suffix, where
718 .Em n
719 is a positive number, causes only the
720 .Em n Ns No th
721 match to be replaced.
722 It is an error if no substitutions are performed on any of the addressed
723 lines.
724 The current address is set the last line affected.
726 .Ar re
728 .Ar replacement
729 may be delimited by any character other than space and newline
730 (see the
731 .Ic s
732 command below).
733 If one or two of the last delimiters is omitted, then the last line
734 affected is printed as though the print suffix
735 .Em p
736 were specified.
738 An unescaped
739 .Ql \*[Am]
741 .Ar replacement
742 is replaced by the currently matched text.
743 The character sequence
744 .Em \em ,
745 where
746 .Em m
747 is a number in the range [1,9], is replaced by the
748 .Em m Ns No th
749 backreference expression of the matched text.
751 .Ar replacement
752 consists of a single
753 .Ql % ,
754 then
755 .Ar replacement
756 from the last substitution is used.
757 Newlines may be embedded in
758 .Ar replacement
759 if they are escaped with a backslash
760 .Pq Ql \e .
761 .It (.,.) Ns Ic s
762 Repeats the last substitution.
763 This form of the
764 .Ic s
765 command accepts a count suffix
766 .Em n ,
767 or any combination of the characters
768 .Em r ,
769 .Em g ,
771 .Em p .
772 If a count suffix
773 .Em n
774 is given, then only the
775 .Em n Ns No th
776 match is replaced.
778 .Em r
779 suffix causes
780 the regular expression of the last search to be used instead of
781 that of the last substitution.
783 .Em g
784 suffix toggles the global suffix of the last substitution.
786 .Em p
787 suffix toggles the print suffix of the last substitution.
788 The current address is set to the last line affected.
789 .It (.,.) Ns Ic t Ns No (.)
790 Copies (i.e., transfers) the addressed lines to after the right-hand
791 destination address, which may be the address
792 .Em 0
793 (zero).
794 The current address is set to the last line copied.
795 .It Ic u
796 Undoes the last command and restores the current address
797 to what it was before the command.
798 The global commands
799 .Ic g ,
800 .Ic G ,
801 .Ic v ,
803 .Ic V
804 are treated as a single command by undo.
805 .Ic u
806 is its own inverse.
807 .It (1,$) Ns Ic v Ns Ar /re/command-list
808 Applies
809 .Ar command-list
810 to each of the addressed lines not matching a regular expression
811 .Ar re .
812 This is similar to the
813 .Ic g
814 command.
815 .It (1,$) Ns Ic V Ns Ar /re/
816 Interactively edits the addressed lines not matching a regular expression
817 .Ar re .
818 This is similar to the
819 .Ic G
820 command.
821 .It (1,$) Ns Ic w Ar file
822 Writes the addressed lines to
823 .Ar file .
824 Any previous contents of
825 .Ar file
826 are lost without warning.
827 If there is no default filename, then the default filename is set to
828 .Ar file ,
829 otherwise it is unchanged.
830 If no filename is specified, then the default filename is used.
831 The current address is unchanged.
832 .It (1,$) Ns Ic wq Ar file
833 Writes the addressed lines to
834 .Ar file ,
835 and then executes a
836 .Ic q
837 command.
838 .It (1,$) Ns Ic w Ar !command
839 Writes the addressed lines to the standard input of
840 .Ar command ,
841 (see the
842 .Ic \&!
843 command below).
844 The default filename and current address are unchanged.
845 .It (1,$) Ns Ic W Ar file
846 Appends the addressed lines to the end of
847 .Ar file .
848 This is similar to the
849 .Ic w
850 command, except that the previous contents of file are not clobbered.
851 The current address is unchanged.
852 .It Ic x
853 Prompts for an encryption key which is used in subsequent reads and writes.
854 If a newline alone is entered as the key, then encryption is turned off.
855 Otherwise, echoing is disabled while a key is read.
856 Encryption/decryption is done using the
857 .Xr bdes 1
858 algorithm.
859 .It (.+1) Ns Ic z Ns Ar n
860 Scrolls
861 .Ar n
862 lines at a time starting at addressed line.
864 .Ar n
865 is not specified, then the current window size is used.
866 The current address is set to the last line printed.
867 .It ($) Ns Ic =
868 Prints the line number of the addressed line.
869 .It (.+1) Ns Ic newline
870 Prints the addressed line, and sets the current address to that line.
871 .It Ic \&! Ns Ar command
872 Executes
873 .Ar command
875 .Xr sh 1 .
876 If the first character of
877 .Ar command
879 .Ic \&! ,
880 then it is replaced by text of the previous
881 .Ic !command .
883 does not process
884 .Ar command
886 .Sq \e
887 (backslash) escapes.
888 However, an unescaped
889 .Sq %
890 is replaced by the default filename.
891 When the shell returns from execution, a
892 .Sq \&!
893 is printed to the standard output.
894 The current line is unchanged.
896 .Sh LIMITATIONS
898 processes
899 .Em file
900 arguments for backslash escapes, i.e., in a filename,
901 any characters preceded by a backslash
902 .Pq Ql \e
903 are interpreted literally.
905 If a text (non-binary) file is not terminated by a newline character,
906 then
908 appends one on reading/writing it.
909 In the case of a binary file,
911 does not append a newline on reading/writing.
912 .Sh ENVIRONMENT
913 .Bl -tag -width iTMPDIR
914 .It Ev TMPDIR
915 The location used to store temporary files.
917 .Sh FILES
918 .Bl -tag -width /tmp/ed.* -compact
919 .It Pa /tmp/ed.*
920 buffer file
921 .It Pa ed.hup
922 where
924 attempts to write the buffer if the terminal hangs up
926 .Sh DIAGNOSTICS
927 When an error occurs,
929 prints a
930 .Dq \&?
931 and either returns to command mode or exits if its input is from a script.
932 An explanation of the last error can be printed with the
933 .Ic h
934 (help) command.
936 Since the
937 .Ic g
938 (global) command masks any errors from failed searches and substitutions,
939 it can be used to perform conditional operations in scripts; e.g.,
940 .Bd -literal -offset indent
941 g/old/s//new/
944 replaces any occurrences of
945 .Em old
946 with
947 .Em new .
949 If the
950 .Ic u
951 (undo) command occurs in a global command list, then
952 the command list is executed only once.
954 If diagnostics are not disabled, attempting to quit
956 or edit another file before writing a modified buffer results in an error.
957 If the command is entered a second time, it succeeds,
958 but any changes to the buffer are lost.
959 .Sh SEE ALSO
960 .Xr bdes 1 ,
961 .Xr sed 1 ,
962 .Xr sh 1 ,
963 .Xr vi 1 ,
964 .Xr patch 1 ,
965 .Xr regex 3
967 USD:09-10
969 .%A B. W. Kernighan
970 .%A P. J. Plauger
971 .%B Software Tools in Pascal
972 .%I Addison-Wesley
973 .%D 1981
975 .Sh HISTORY
978 command appeared in
979 .At v1 .