Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Apr 2006 23:39:22 +0200
From:      "Andreas Kohn" <andreas@syndrom23.de>
To:        "FreeBSD gnats submit" <FreeBSD-gnats-submit@FreeBSD.org>
Subject:   standards/96236: [PATCH] [POSIX] sed.1 incorrectly describes a function-list
Message-ID:  <1145828362.16563@klamath.syndrom23.de>
Resent-Message-ID: <200604232140.k3NLeIau080541@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         96236
>Category:       standards
>Synopsis:       [PATCH] [POSIX] sed.1 incorrectly describes a function-list
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-standards
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          doc-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Apr 23 21:40:18 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Andreas Kohn
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
>Environment:


System: FreeBSD 7.0-CURRENT #41: Fri Mar 17 12:01:02 CET 2006
    root@klamath.syndrom23.de:/usr/obj/usr/src/sys/KLAMATH



>Description:


sed.1 says about a function-list:

This is a list of sed functions separated by newlines, as follows:
The ``{'' can be preceded by white space and can be followed by white
space.  The function can be preceded by white space.  The terminating
``}'' must be preceded by a newline or optional white space.

According to SUS, this is incorrect:
The <right-brace> shall be preceded by a <newline> and can be preceded or followed by <blank>s.

The sed command does follow SUS, see attached test case.
GNU sed (4.1.4 tested) also allows that the } is only preceeded by whitespace, see attached test case.

A simple fix would be to replace the "or" with an "and", as in the patch.



>How-To-Repeat:


Try the test case from sed-check.shar with both SED=sed and SED=gsed. Compare with documentation and SUS.



>Fix:


--- sed-check.shar begins here ---
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	sed-check
#	sed-check/Makefile
#	sed-check/testcase.gsed
#	sed-check/testcase.txt
#
echo c - sed-check
mkdir -p sed-check > /dev/null 2>&1
echo x - sed-check/Makefile
sed 's/^X//' >sed-check/Makefile << 'END-of-sed-check/Makefile'
X# Check for [2addr] function-list functionaly of sed
X
X# try with gsed
XSED?=sed
X
Xtest:
X	if ! ${SED} -e '/start/,/end/ { s/foobar/barbaz/ }' testcase.txt > testcase.out; then \
X		echo FAILED ; \
X	else \
X		if ! cmp -s testcase.gsed testcase.out; then \
X			echo FAILED ; \
X		else \
X			echo PASSED ; \
X		fi \
X	fi
X	
X
END-of-sed-check/Makefile
echo x - sed-check/testcase.gsed
sed 's/^X//' >sed-check/testcase.gsed << 'END-of-sed-check/testcase.gsed'
Xsome text which should not be touched
Xalthough it does contain the search strings "foobar"
X
Xstart
Xhere is some text that also contains barbaz, which should be changed.
Xsome more text.
Xend
X
Xthe next foobar should stay foobar.
X
END-of-sed-check/testcase.gsed
echo x - sed-check/testcase.txt
sed 's/^X//' >sed-check/testcase.txt << 'END-of-sed-check/testcase.txt'
Xsome text which should not be touched
Xalthough it does contain the search strings "foobar"
X
Xstart
Xhere is some text that also contains foobar, which should be changed.
Xsome more text.
Xend
X
Xthe next foobar should stay foobar.
X
END-of-sed-check/testcase.txt
exit

--- sed-check.shar ends here ---

--- sed.1-function-list.diff begins here ---
Index: sed.1
===================================================================
RCS file: /storage/freebsd/cvs/src/usr.bin/sed/sed.1,v
retrieving revision 1.43
diff -u -r1.43 sed.1
--- sed.1	14 Jun 2005 11:50:52 -0000	1.43
+++ sed.1	23 Apr 2006 21:29:32 -0000
@@ -280,7 +280,7 @@
 The function can be preceded by white space.
 The terminating
 .Dq }
-must be preceded by a newline or optional white space.
+must be preceded by a newline and optional white space.
 .Pp
 .Bl -tag -width "XXXXXX" -compact
 .It [2addr] function-list
--- sed.1-function-list.diff ends here ---



>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1145828362.16563>