sed bug?

David St. Pierre dsp at ptsfa.UUCP
Thu Jul 25 00:25:52 AEST 1985


Summary: sed 'p' function not consistent with s's 'p' flag on SV_R2 - 3B20
[I mis-posted this to unix-wizards earlier and got no reply. Maybe I'll
have better luck here?]

I was looking at Larry Wall's "newsgroups" to find out why it wasn't
reporting on newsgroups which were still in my .newsrc but unsubscribed.
After some testing I found that, in this particular context,

	-e s/aaa/bbb/ -e /bbb/p		and -e s/aaa/bbb/p

were not equivalent. Larry's sed scripts appear at the end of the article:
both of them were terminated with a  "-e d" function. Further testing
revealed

	sed -e s/aaa//bbb/ -e /bbb/p -e d
	sed -n -e s/aaa/bbb/ -e /bbb/p -e d
	sed -n -e s/aaa/bbb/ -e /bbb/p
	sed -n -e s/aaa/bbb/p -e d
	sed -n -e s/aaa/bbb/p

produced similar results, but

	sed -e s/aaa/bbb/p -e d

would produce nothing. The manual page says that the 'p' function will
"copy the pattern space to the standard output", while the 'p' flag
"prints the pattern space if a replacement was made".
I thought I understood the normal usage of the 'p' flag, but is the
wording a subtle indication that the above example is in fact a feature?

How does this example work on other systems?

Also, is the "-n" flag a standard feature of sed? I thought it should be
equivalent to a "-e d" as a final command string in all cases.

=========================
abbreviated "newsgroups"

cat $dotdir/.newsrc $dotdir/.newsrc $active | \
sed	-e '/^options/d' \
	-e '/^[	 ]/d' \
	-e '/^control/d' \
	-e '/^to\./d' \
	-e 's/^\([^ !:]*\)[ !:].*$/\1/' \
	-e "/.*$1/p" \
	-e 'd' | \
sort | uniq -u | $pager

sed < $dotdir/.newsrc \
	-e "/$1.*!/"'s/^\([^!]*\)!.*$/\1/p' \
	-e 'd' | \
sort | $pager

-- 
David St. Pierre		{ihnp4,dual,qantel}!ptsfa!dsp



More information about the Net.bugs.usg mailing list