xref: /freebsd/bin/ed/POSIX (revision 6b7b2d80ed4d728d3ffd12c422e57798c1b63a84)
1$FreeBSD$
2
3This version of ed(1) is not strictly POSIX compliant, as described in
4the POSIX 1003.2 document.  The following is a summary of the omissions,
5extensions and possible deviations from POSIX 1003.2.
6
7OMISSIONS
8---------
91) For backwards compatibility, the POSIX rule that says a range of
10   addresses cannot be used where only a single address is expected has
11   been relaxed.
12
132) To support the BSD `s' command (see extension [1] below),
14   substitution patterns cannot be delimited by numbers or the characters
15   `r', `g' and `p'.  In contrast, POSIX specifies any character expect
16   space or newline can used as a delimiter.
17
18EXTENSIONS
19----------
201) BSD commands have been implemented wherever they do not conflict with
21   the POSIX standard.  The BSD-ism's included are:
22	i) `s' (i.e., s[n][rgp]*) to repeat a previous substitution,
23	ii) `W' for appending text to an existing file,
24	iii) `wq' for exiting after a write,
25	iv) `z' for scrolling through the buffer, and
26	v) BSD line addressing syntax (i.e., `^' and `%')  is recognized.
27
282) If crypt(3) is available, files can be read and written using DES
29   encryption.  The `x' command prompts the user to enter a key used for
30   encrypting/ decrypting subsequent reads and writes.  If only a newline
31   is entered as the key, then encryption is disabled.  Otherwise, a key
32   is read in the same manner as a password entry.  The key remains in
33   effect until encryption is disabled.  For more information on the
34   encryption algorithm, see the bdes(1) man page.  Encryption/decryption
35   should be fully compatible with SunOS des(1).
36
373) The POSIX interactive global commands `G' and `V' are extended to
38   support multiple commands, including `a', `i' and `c'.  The command
39   format is the same as for the global commands `g' and `v', i.e., one
40   command per line with each line, except for the last, ending in a
41   backslash (\).
42
434) An extension to the POSIX file commands `E', `e', `r', `W' and `w' is
44   that <file> arguments are processed for backslash escapes, i.e.,  any
45   character preceded by a backslash is interpreted literally.  If the
46   first unescaped character of a <file> argument is a bang (!), then the
47   rest of the line is interpreted as a shell command, and no escape
48   processing is performed by ed.
49
505) For SunOS ed(1) compatibility, ed runs in restricted mode if invoked
51   as red.  This limits editing of files in the local directory only and
52   prohibits shell commands.
53
54DEVIATIONS
55----------
561) Though ed is not a stream editor, it can be used to edit binary files.
57   To assist in binary editing, when a file containing at least one ASCII
58   NUL character is written, a newline is not appended if it did not
59   already contain one upon reading.  In particular, reading /dev/null
60   prior to writing prevents appending a newline to a binary file.
61
62   For example, to create a file with ed containing a single NUL character:
63      $ ed file
64      a
65      ^@
66      .
67      r /dev/null
68      wq
69
70    Similarly, to remove a newline from the end of binary `file':
71      $ ed file
72      r /dev/null
73      wq
74
752) Since the behavior of `u' (undo) within a `g' (global) command list is
76   not specified by POSIX, it follows the behavior of the SunOS ed:
77   undo forces a global command list to be executed only once, rather than
78   for each line matching a global pattern.  In addition, each instance of
79   `u' within a global command undoes all previous commands (including
80   undo's) in the command list.  This seems the best way, since the
81   alternatives are either too complicated to implement or too confusing
82   to use.
83
84   The global/undo combination is useful for masking errors that
85   would otherwise cause a script to fail.  For instance, an ed script
86   to remove any occurrences of either `censor1' or `censor2' might be
87   written as:
88   	ed - file <<EOF
89	1g/.*/u\
90	,s/censor1//g\
91	,s/censor2//g
92	...
93
943) The `m' (move) command within a `g' command list also follows the SunOS
95   ed implementation: any moved lines are removed from the global command's
96   `active' list.
97
984) If ed is invoked with a name argument prefixed by a bang (!), then the
99   remainder of the argument is interpreted as a shell command.  To invoke
100   ed on a file whose name starts with bang, prefix the name with a
101   backslash.
102