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