90 lines
3.8 KiB
Plaintext
90 lines
3.8 KiB
Plaintext
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 <file> arguments are processed for backslash escapes, i.e., any
|
|
character preceded by a backslash is interpreted literally. If the
|
|
first unescaped character of a <file> 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.
|