This version of ed(1) is not strictly POSIX compliant, as described in the POSIX 1003.2 document. The following is a summary of the omissions, extensions and possible deviations from POSIX 1003.2. OMISSIONS --------- 1) Locale(3) is not supported yet. 2) For backwards compatibility, the POSIX rule that says a range of addresses cannot be used where only a single address is expected has been relaxed. EXTENSIONS ---------- 1) BSD commands have been implemented wherever they do not conflict with the POSIX standard. The BSD-ism's included are: i) `s' (i.e., s[rgp]*) to repeat a previous substitution, ii) `W' for appending text to an existing file, iii) `wq' for exiting after a write, iv) `z' for scrolling through the buffer, and v) BSD line addressing syntax (i.e., `^' and `%') is recognized. 2) If crypt(3) is available, files can be read and written using DES encryption. The `x' command prompts the user to enter a key used for encrypting/ decrypting subsequent reads and writes. If only a newline is entered as the key, then encryption is disabled. Otherwise, a key is read in the same manner as a password entry. The key remains in effect until encryption is disabled. For more information on the encryption algorithm, see the bdes(1) man page. Encryption/decryption should be fully compatible with SunOS DES. 3) The POSIX interactive global commands `G' and `V' are extended to support multiple commands, including `a', `i' and `c'. The command format is the same as for the global commands `g' and `v', i.e., one command per line with each line, except for the last, ending in a backslash (\). 4) Though ed is not a binary editor, it can be used (if painfully) to edit binary files. To assist in binary editing, when a file containing at least one ASCII NUL character is written, a newline is not appended if it did not already contain one upon reading. For instance, to create a file containing a single NUL, one might use: $ cp /dev/null file $ ed file a ^@ . wq $ 5) An extension to the POSIX file commands `E', `e', `r', `W' and `w' is that arguments are processed for backslash escapes, i.e., any character preceded by a backslash is interpreted literally. If the first unescaped character of a argument is a bang (!), then the rest of the line is interpreted as a shell command, and no escape processing is performed by ed. 6) The ex(1) editor's ! (bang) command syntax is supported, i.e.: i) commands of the form: (addr1,addr2) !shell-command replace the addressed lines with the output of the shell- command, and ii) commands of the form: [rwe] !! read, write, or edit, respectively, the previous shell-command. 7) For SunOS ed(1) compatibility, ed runs in restricted mode if invoked as red. This limits editing of files in the local directory only and prohibits shell commands. DEVIATIONS ---------- 1) Since the behavior of `u' (undo) within a `g' (global) command list is not specified by POSIX, it follows the behavior of the SunOS ed (this is the best way, I think, in that the alternatives are either too complicated to implement or too confusing to use): undo forces a global command list to be executed only once, rather than for each line matching a global pattern. In addtion, each instance of `u' within a global command undoes all previous commands (including undo's) in the command list. 2) The `m' (move) command within a `g' command list also follows the SunOS ed implementation: any moved lines are removed from the global command's `active' list. 3) If ed is invoked with a name argument prefixed by a bang, then the remainder of the argument is interpreted as a shell command. To invoke ed on a file whose name starts with bang, prefix the name with a backslash.