When I wrote my entry on some differences between various versions of
ed(1)
, I forgot to check the Single Unix Specification to see if it has anything to say about
ed
. It turns out that it does, and
ed
is part of the 'Shell & Utilities' section.
SUS
ed
is mostly the same as FreeBSD
ed
, which is kind of what I think of as 'the baseline modern
ed
'. SUS
ed
requires that
s
support a bunch of flags for printing the results (only GNU ed documents supporting them all), but it doesn't require a
z
command (to print paginated output). Interestingly, SUS requires that
ed
support a prompt and extra help, and that it print warnings if you try to do something that would lose a modified buffer. SUS
ed
is only required to support SUS Basic Regular Expressions , while all modern
ed
s go at least somewhat beyond this; FreeBSD
ed
supports '
\<
' and '
\>
', for example.
One area of
ed
's history that I don't know very much about is how it evolved in System III and System V. SCO's website (of all people) has a PDF version of the System V Interface Definition online here , and for as long as it lasts you want to look in volume 2 for the manpage for
ed
. The SVID
ed
is mostly the same as FreeBSD
ed
, and in particular it has '
\<
' and '
\>
' in its regular expressions, unlike SUS
ed
. Its
s
command doesn't support the
l
,
n
, or
p
flags (required by SUS but not in FreeBSD). It does have prompting and help. I think that
ed
is the only editor required by the SVID, which may explain why the System V people enhanced it over the V7 and BSD
ed
s; in BSD, the development of
vi
(and before it
ex
) probably made
ed
a relatively secondary editor.
Conveniently, the SUS
ed
documentation includes a rationale section that includes a discussion of historical differences between BSD and SVID behavior, commands supported, and so on. Of course, 'BSD' in the SUS basically means 'UCB BSD through 4.4 or so', as I don't think the SUS looks at what modern FreeBSD and OpenBSD are doing any more than it looks at Linux or GNU programs.
( My previous entry and this one only look at obvious differences like commands supported. I'm sure that there are plenty of subtle behavior differences between various versions of
ed
, both old and modern ones; the SUS
ed
rationale points out some of them, and GNU ed's
--traditional
switch suggests other points of difference for it.)