sed.test revision 1.4 1 1.1 cgd #!/bin/sh -
2 1.4 uwe # $NetBSD: sed.test,v 1.4 2003/10/27 20:09:49 uwe Exp $
3 1.1 cgd #
4 1.1 cgd # Copyright (c) 1992 Diomidis Spinellis.
5 1.1 cgd # Copyright (c) 1992, 1993
6 1.1 cgd # The Regents of the University of California. All rights reserved.
7 1.1 cgd #
8 1.1 cgd # Redistribution and use in source and binary forms, with or without
9 1.1 cgd # modification, are permitted provided that the following conditions
10 1.1 cgd # are met:
11 1.1 cgd # 1. Redistributions of source code must retain the above copyright
12 1.1 cgd # notice, this list of conditions and the following disclaimer.
13 1.1 cgd # 2. Redistributions in binary form must reproduce the above copyright
14 1.1 cgd # notice, this list of conditions and the following disclaimer in the
15 1.1 cgd # documentation and/or other materials provided with the distribution.
16 1.1 cgd # 3. All advertising materials mentioning features or use of this software
17 1.1 cgd # must display the following acknowledgement:
18 1.1 cgd # This product includes software developed by the University of
19 1.1 cgd # California, Berkeley and its contributors.
20 1.1 cgd # 4. Neither the name of the University nor the names of its contributors
21 1.1 cgd # may be used to endorse or promote products derived from this software
22 1.1 cgd # without specific prior written permission.
23 1.1 cgd #
24 1.1 cgd # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 1.1 cgd # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 1.1 cgd # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 1.1 cgd # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 1.1 cgd # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 1.1 cgd # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 1.1 cgd # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 1.1 cgd # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 1.1 cgd # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 1.1 cgd # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 1.1 cgd # SUCH DAMAGE.
35 1.1 cgd #
36 1.2 cgd # from: @(#)sed.test 8.1 (Berkeley) 6/6/93
37 1.4 uwe # $NetBSD: sed.test,v 1.4 2003/10/27 20:09:49 uwe Exp $
38 1.1 cgd #
39 1.1 cgd
40 1.1 cgd # sed Regression Tests
41 1.1 cgd #
42 1.1 cgd # The following files are created:
43 1.1 cgd # lines[1-4], script1, script2
44 1.1 cgd # Two directories *.out contain the test results
45 1.1 cgd
46 1.1 cgd main()
47 1.1 cgd {
48 1.1 cgd BASE=/usr/old/bin/sed
49 1.1 cgd BASELOG=sed.out
50 1.1 cgd TEST=../obj/sed
51 1.1 cgd TESTLOG=nsed.out
52 1.1 cgd DICT=/usr/share/dict/words
53 1.1 cgd
54 1.1 cgd test_error | more
55 1.1 cgd
56 1.1 cgd awk 'END { for (i = 1; i < 15; i++) print "l1_" i}' </dev/null >lines1
57 1.1 cgd awk 'END { for (i = 1; i < 10; i++) print "l2_" i}' </dev/null >lines2
58 1.1 cgd
59 1.1 cgd exec 4>&1 5>&2
60 1.1 cgd
61 1.1 cgd # Set these flags to get messages about known problems
62 1.1 cgd BSD=1
63 1.1 cgd GNU=0
64 1.1 cgd SUN=0
65 1.1 cgd tests $BASE $BASELOG
66 1.1 cgd
67 1.1 cgd BSD=0
68 1.1 cgd GNU=0
69 1.1 cgd SUN=0
70 1.1 cgd tests $TEST $TESTLOG
71 1.1 cgd exec 1>&4 2>&5
72 1.1 cgd diff -c $BASELOG $TESTLOG | more
73 1.1 cgd }
74 1.1 cgd
75 1.1 cgd tests()
76 1.1 cgd {
77 1.1 cgd SED=$1
78 1.1 cgd DIR=$2
79 1.1 cgd rm -rf $DIR
80 1.1 cgd mkdir $DIR
81 1.1 cgd MARK=100
82 1.1 cgd
83 1.1 cgd test_args
84 1.1 cgd test_addr
85 1.1 cgd echo Testing commands
86 1.1 cgd test_group
87 1.1 cgd test_acid
88 1.1 cgd test_branch
89 1.1 cgd test_pattern
90 1.1 cgd test_print
91 1.1 cgd test_subst
92 1.1 cgd }
93 1.1 cgd
94 1.1 cgd mark()
95 1.1 cgd {
96 1.1 cgd MARK=`expr $MARK + 1`
97 1.1 cgd exec 1>&4 2>&5
98 1.1 cgd exec >"$DIR/${MARK}_$1"
99 1.1 cgd echo "Test $1:$MARK"
100 1.1 cgd # Uncomment this line to match tests with sed error messages
101 1.1 cgd echo "Test $1:$MARK" >&5
102 1.1 cgd }
103 1.1 cgd
104 1.1 cgd test_args()
105 1.1 cgd {
106 1.1 cgd mark '1.1'
107 1.1 cgd echo Testing argument parsing
108 1.1 cgd echo First type
109 1.1 cgd if [ $SUN -eq 1 ] ; then
110 1.1 cgd echo SunOS sed prints only with -n
111 1.1 cgd else
112 1.1 cgd $SED 's/^/e1_/p' lines1
113 1.1 cgd fi
114 1.1 cgd mark '1.2' ; $SED -n 's/^/e1_/p' lines1
115 1.1 cgd mark '1.3'
116 1.1 cgd if [ $SUN -eq 1 ] ; then
117 1.1 cgd echo SunOS sed prints only with -n
118 1.1 cgd else
119 1.1 cgd $SED 's/^/e1_/p' <lines1
120 1.1 cgd fi
121 1.1 cgd mark '1.4' ; $SED -n 's/^/e1_/p' <lines1
122 1.1 cgd echo Second type
123 1.1 cgd mark '1.4.1'
124 1.1 cgd if [ $SUN -eq 1 ] ; then
125 1.1 cgd echo SunOS sed fails this
126 1.1 cgd fi
127 1.1 cgd $SED -e '' <lines1
128 1.1 cgd echo 's/^/s1_/p' >script1
129 1.1 cgd echo 's/^/s2_/p' >script2
130 1.1 cgd mark '1.5'
131 1.1 cgd if [ $SUN -eq 1 ] ; then
132 1.1 cgd echo SunOS sed prints only with -n
133 1.1 cgd else
134 1.1 cgd $SED -f script1 lines1
135 1.1 cgd fi
136 1.1 cgd mark '1.6'
137 1.1 cgd if [ $SUN -eq 1 ] ; then
138 1.1 cgd echo SunOS sed prints only with -n
139 1.1 cgd else
140 1.1 cgd $SED -f script1 <lines1
141 1.1 cgd fi
142 1.1 cgd mark '1.7'
143 1.1 cgd if [ $SUN -eq 1 ] ; then
144 1.1 cgd echo SunOS sed prints only with -n
145 1.1 cgd else
146 1.1 cgd $SED -e 's/^/e1_/p' lines1
147 1.1 cgd fi
148 1.1 cgd mark '1.8'
149 1.1 cgd if [ $SUN -eq 1 ] ; then
150 1.1 cgd echo SunOS sed prints only with -n
151 1.1 cgd else
152 1.1 cgd $SED -e 's/^/e1_/p' <lines1
153 1.1 cgd fi
154 1.1 cgd mark '1.9' ; $SED -n -f script1 lines1
155 1.1 cgd mark '1.10' ; $SED -n -f script1 <lines1
156 1.1 cgd mark '1.11' ; $SED -n -e 's/^/e1_/p' lines1
157 1.1 cgd mark '1.12'
158 1.1 cgd if [ $SUN -eq 1 ] ; then
159 1.1 cgd echo SunOS sed prints only with -n
160 1.1 cgd else
161 1.1 cgd $SED -n -e 's/^/e1_/p' <lines1
162 1.1 cgd fi
163 1.1 cgd mark '1.13'
164 1.1 cgd if [ $SUN -eq 1 ] ; then
165 1.1 cgd echo SunOS sed prints only with -n
166 1.1 cgd else
167 1.1 cgd $SED -e 's/^/e1_/p' -e 's/^/e2_/p' lines1
168 1.1 cgd fi
169 1.1 cgd mark '1.14'
170 1.1 cgd if [ $SUN -eq 1 ] ; then
171 1.1 cgd echo SunOS sed prints only with -n
172 1.1 cgd else
173 1.1 cgd $SED -f script1 -f script2 lines1
174 1.1 cgd fi
175 1.1 cgd mark '1.15'
176 1.1 cgd if [ $GNU -eq 1 -o $SUN -eq 1 ] ; then
177 1.1 cgd echo GNU and SunOS sed fail this following older POSIX draft
178 1.1 cgd else
179 1.1 cgd $SED -e 's/^/e1_/p' -f script1 lines1
180 1.1 cgd fi
181 1.1 cgd mark '1.16'
182 1.1 cgd if [ $SUN -eq 1 ] ; then
183 1.1 cgd echo SunOS sed prints only with -n
184 1.1 cgd else
185 1.1 cgd $SED -e 's/^/e1_/p' lines1 lines1
186 1.1 cgd fi
187 1.1 cgd # POSIX D11.2:11251
188 1.1 cgd mark '1.17' ; $SED p <lines1 lines1
189 1.1 cgd cat >script1 <<EOF
190 1.1 cgd #n
191 1.1 cgd # A comment
192 1.1 cgd
193 1.1 cgd p
194 1.1 cgd EOF
195 1.1 cgd mark '1.18' ; $SED -f script1 <lines1 lines1
196 1.1 cgd }
197 1.1 cgd
198 1.1 cgd test_addr()
199 1.1 cgd {
200 1.1 cgd echo Testing address ranges
201 1.1 cgd mark '2.1' ; $SED -n -e '4p' lines1
202 1.1 cgd mark '2.2' ; $SED -n -e '20p' lines1 lines2
203 1.1 cgd mark '2.3' ; $SED -n -e '$p' lines1
204 1.1 cgd mark '2.4' ; $SED -n -e '$p' lines1 lines2
205 1.1 cgd mark '2.5' ; $SED -n -e '$a\
206 1.1 cgd hello' /dev/null
207 1.1 cgd mark '2.6' ; $SED -n -e '$p' lines1 /dev/null lines2
208 1.1 cgd # Should not print anything
209 1.1 cgd mark '2.7' ; $SED -n -e '20p' lines1
210 1.1 cgd mark '2.8' ; $SED -n -e '0p' lines1
211 1.1 cgd mark '2.9' ; $SED -n '/l1_7/p' lines1
212 1.1 cgd mark '2.10' ; $SED -n ' /l1_7/ p' lines1
213 1.1 cgd mark '2.11'
214 1.1 cgd if [ $BSD -eq 1 ] ; then
215 1.1 cgd echo BSD sed fails this test
216 1.1 cgd fi
217 1.1 cgd if [ $GNU -eq 1 ] ; then
218 1.1 cgd echo GNU sed fails this
219 1.1 cgd fi
220 1.1 cgd $SED -n '\_l1\_7_p' lines1
221 1.1 cgd mark '2.12' ; $SED -n '1,4p' lines1
222 1.1 cgd mark '2.13' ; $SED -n '1,$p' lines1 lines2
223 1.1 cgd mark '2.14' ; $SED -n '1,/l2_9/p' lines1 lines2
224 1.1 cgd mark '2.15' ; $SED -n '/4/,$p' lines1 lines2
225 1.1 cgd mark '2.16' ; $SED -n '/4/,20p' lines1 lines2
226 1.1 cgd mark '2.17' ; $SED -n '/4/,/10/p' lines1 lines2
227 1.1 cgd mark '2.18' ; $SED -n '/l2_3/,/l1_8/p' lines1 lines2
228 1.1 cgd mark '2.19'
229 1.1 cgd if [ $GNU -eq 1 ] ; then
230 1.1 cgd echo GNU sed fails this
231 1.1 cgd fi
232 1.1 cgd $SED -n '12,3p' lines1 lines2
233 1.1 cgd mark '2.20'
234 1.1 cgd if [ $GNU -eq 1 ] ; then
235 1.1 cgd echo GNU sed fails this
236 1.1 cgd fi
237 1.1 cgd $SED -n '/l1_7/,3p' lines1 lines2
238 1.1 cgd }
239 1.1 cgd
240 1.1 cgd test_group()
241 1.1 cgd {
242 1.1 cgd echo Brace and other grouping
243 1.1 cgd mark '3.1' ; $SED -e '
244 1.1 cgd 4,12 {
245 1.1 cgd s/^/^/
246 1.1 cgd s/$/$/
247 1.1 cgd s/_/T/
248 1.1 cgd }' lines1
249 1.1 cgd mark '3.2' ; $SED -e '
250 1.1 cgd 4,12 {
251 1.1 cgd s/^/^/
252 1.1 cgd /6/,/10/ {
253 1.1 cgd s/$/$/
254 1.1 cgd /8/ s/_/T/
255 1.1 cgd }
256 1.1 cgd }' lines1
257 1.1 cgd mark '3.3' ; $SED -e '
258 1.1 cgd 4,12 !{
259 1.1 cgd s/^/^/
260 1.1 cgd /6/,/10/ !{
261 1.1 cgd s/$/$/
262 1.1 cgd /8/ !s/_/T/
263 1.1 cgd }
264 1.1 cgd }' lines1
265 1.1 cgd mark '3.4' ; $SED -e '4,12!s/^/^/' lines1
266 1.1 cgd }
267 1.1 cgd
268 1.1 cgd test_acid()
269 1.1 cgd {
270 1.1 cgd echo Testing a c d and i commands
271 1.1 cgd mark '4.1' ; $SED -n -e '
272 1.1 cgd s/^/before_i/p
273 1.1 cgd 20i\
274 1.1 cgd inserted
275 1.1 cgd s/^/after_i/p
276 1.1 cgd ' lines1 lines2
277 1.1 cgd mark '4.2' ; $SED -n -e '
278 1.1 cgd 5,12s/^/5-12/
279 1.1 cgd s/^/before_a/p
280 1.1 cgd /5-12/a\
281 1.1 cgd appended
282 1.1 cgd s/^/after_a/p
283 1.1 cgd ' lines1 lines2
284 1.1 cgd mark '4.3'
285 1.1 cgd if [ $GNU -eq 1 ] ; then
286 1.1 cgd echo GNU sed fails this
287 1.1 cgd fi
288 1.1 cgd $SED -n -e '
289 1.1 cgd s/^/^/p
290 1.1 cgd /l1_/a\
291 1.1 cgd appended
292 1.1 cgd 8,10N
293 1.1 cgd s/$/$/p
294 1.1 cgd ' lines1 lines2
295 1.1 cgd mark '4.4' ; $SED -n -e '
296 1.1 cgd c\
297 1.1 cgd hello
298 1.1 cgd ' lines1
299 1.1 cgd mark '4.5' ; $SED -n -e '
300 1.1 cgd 8c\
301 1.1 cgd hello
302 1.1 cgd ' lines1
303 1.1 cgd mark '4.6' ; $SED -n -e '
304 1.1 cgd 3,14c\
305 1.1 cgd hello
306 1.1 cgd ' lines1
307 1.1 cgd # SunOS and GNU sed behave differently. We follow POSIX
308 1.1 cgd # mark '4.7' ; $SED -n -e '
309 1.1 cgd #8,3c\
310 1.1 cgd #hello
311 1.1 cgd #' lines1
312 1.1 cgd mark '4.8' ; $SED d <lines1
313 1.1 cgd }
314 1.1 cgd
315 1.1 cgd test_branch()
316 1.1 cgd {
317 1.1 cgd echo Testing labels and branching
318 1.1 cgd mark '5.1' ; $SED -n -e '
319 1.1 cgd b label4
320 1.1 cgd :label3
321 1.1 cgd s/^/label3_/p
322 1.1 cgd b end
323 1.1 cgd :label4
324 1.1 cgd 2,12b label1
325 1.1 cgd b label2
326 1.1 cgd :label1
327 1.1 cgd s/^/label1_/p
328 1.1 cgd b
329 1.1 cgd :label2
330 1.1 cgd s/^/label2_/p
331 1.1 cgd b label3
332 1.1 cgd :end
333 1.1 cgd ' lines1
334 1.1 cgd mark '5.2'
335 1.1 cgd if [ $BSD -eq 1 ] ; then
336 1.1 cgd echo BSD sed fails this test
337 1.1 cgd fi
338 1.1 cgd $SED -n -e '
339 1.1 cgd s/l1_/l2_/
340 1.1 cgd t ok
341 1.1 cgd b
342 1.1 cgd :ok
343 1.1 cgd s/^/tested /p
344 1.1 cgd ' lines1 lines2
345 1.1 cgd # SunOS sed behaves differently here. Clarification needed.
346 1.1 cgd # mark '5.3' ; $SED -n -e '
347 1.1 cgd #5,8b inside
348 1.1 cgd #1,5 {
349 1.1 cgd # s/^/^/p
350 1.1 cgd # :inside
351 1.1 cgd # s/$/$/p
352 1.1 cgd #}
353 1.1 cgd #' lines1
354 1.1 cgd # Check that t clears the substitution done flag
355 1.1 cgd mark '5.4' ; $SED -n -e '
356 1.1 cgd 1,8s/^/^/
357 1.1 cgd t l1
358 1.1 cgd :l1
359 1.1 cgd t l2
360 1.1 cgd s/$/$/p
361 1.1 cgd b
362 1.1 cgd :l2
363 1.1 cgd s/^/ERROR/
364 1.1 cgd ' lines1
365 1.1 cgd # Check that reading a line clears the substitution done flag
366 1.1 cgd mark '5.5'
367 1.1 cgd if [ $BSD -eq 1 ] ; then
368 1.1 cgd echo BSD sed fails this test
369 1.1 cgd fi
370 1.1 cgd $SED -n -e '
371 1.1 cgd t l2
372 1.1 cgd 1,8s/^/^/p
373 1.1 cgd 2,7N
374 1.1 cgd b
375 1.1 cgd :l2
376 1.1 cgd s/^/ERROR/p
377 1.1 cgd ' lines1
378 1.1 cgd mark '5.6' ; $SED 5q lines1
379 1.1 cgd mark '5.7' ; $SED -e '
380 1.1 cgd 5i\
381 1.1 cgd hello
382 1.1 cgd 5q' lines1
383 1.1 cgd # Branch across block boundary
384 1.1 cgd mark '5.8' ; $SED -e '
385 1.1 cgd {
386 1.1 cgd :b
387 1.1 cgd }
388 1.1 cgd s/l/m/
389 1.1 cgd tb' lines1
390 1.1 cgd }
391 1.1 cgd
392 1.1 cgd test_pattern()
393 1.1 cgd {
394 1.1 cgd echo Pattern space commands
395 1.1 cgd # Check that the pattern space is deleted
396 1.1 cgd mark '6.1' ; $SED -n -e '
397 1.1 cgd c\
398 1.1 cgd changed
399 1.1 cgd p
400 1.1 cgd ' lines1
401 1.1 cgd mark '6.2' ; $SED -n -e '
402 1.1 cgd 4d
403 1.1 cgd p
404 1.1 cgd ' lines1
405 1.1 cgd # SunOS sed refused to print here
406 1.1 cgd # mark '6.3' ; $SED -e '
407 1.1 cgd #N
408 1.1 cgd #N
409 1.1 cgd #N
410 1.1 cgd #D
411 1.1 cgd #P
412 1.1 cgd #4p
413 1.1 cgd #' lines1
414 1.1 cgd mark '6.4' ; $SED -e '
415 1.1 cgd 2h
416 1.1 cgd 3H
417 1.1 cgd 4g
418 1.1 cgd 5G
419 1.1 cgd 6x
420 1.1 cgd 6p
421 1.1 cgd 6x
422 1.1 cgd 6p
423 1.1 cgd ' lines1
424 1.1 cgd mark '6.5' ; $SED -e '4n' lines1
425 1.1 cgd mark '6.6' ; $SED -n -e '4n' lines1
426 1.1 cgd }
427 1.1 cgd
428 1.1 cgd test_print()
429 1.1 cgd {
430 1.1 cgd echo Testing print and file routines
431 1.1 cgd awk 'END {for (i = 1; i < 256; i++) printf("%c", i);print "\n"}' \
432 1.1 cgd </dev/null >lines3
433 1.1 cgd # GNU and SunOS sed behave differently here
434 1.1 cgd mark '7.1'
435 1.1 cgd if [ $BSD -eq 1 ] ; then
436 1.1 cgd echo 'BSD sed drops core on this one; TEST SKIPPED'
437 1.1 cgd else
438 1.1 cgd $SED -n l lines3
439 1.1 cgd fi
440 1.1 cgd mark '7.2' ; $SED -e '/l2_/=' lines1 lines2
441 1.1 cgd rm -f lines4
442 1.1 cgd mark '7.3' ; $SED -e '3,12w lines4' lines1
443 1.1 cgd echo w results
444 1.1 cgd cat lines4
445 1.1 cgd mark '7.4' ; $SED -e '4r lines2' lines1
446 1.1 cgd mark '7.5' ; $SED -e '5r /dev/dds' lines1
447 1.1 cgd mark '7.6' ; $SED -e '6r /dev/null' lines1
448 1.1 cgd mark '7.7'
449 1.1 cgd if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
450 1.1 cgd echo BSD, GNU and SunOS cannot pass this one
451 1.1 cgd else
452 1.1 cgd sed '200q' $DICT | sed 's$.*$s/^/&/w tmpdir/&$' >script1
453 1.1 cgd rm -rf tmpdir
454 1.1 cgd mkdir tmpdir
455 1.1 cgd $SED -f script1 lines1
456 1.1 cgd cat tmpdir/*
457 1.1 cgd rm -rf tmpdir
458 1.1 cgd fi
459 1.1 cgd mark '7.8'
460 1.1 cgd if [ $BSD -eq 1 ] ; then
461 1.1 cgd echo BSD sed cannot pass 7.7
462 1.1 cgd else
463 1.1 cgd echo line1 > lines3
464 1.1 cgd echo "" >> lines3
465 1.1 cgd $SED -n -e '$p' lines3 /dev/null
466 1.1 cgd fi
467 1.1 cgd
468 1.1 cgd }
469 1.1 cgd
470 1.1 cgd test_subst()
471 1.1 cgd {
472 1.1 cgd echo Testing substitution commands
473 1.1 cgd mark '8.1' ; $SED -e 's/./X/g' lines1
474 1.1 cgd mark '8.2' ; $SED -e 's,.,X,g' lines1
475 1.1 cgd # GNU and SunOS sed thinks we are escaping . as wildcard, not as separator
476 1.1 cgd # mark '8.3' ; $SED -e 's.\..X.g' lines1
477 1.1 cgd # POSIX does not say that this should work
478 1.1 cgd # mark '8.4' ; $SED -e 's/[/]/Q/' lines1
479 1.1 cgd mark '8.4' ; $SED -e 's/[\/]/Q/' lines1
480 1.1 cgd mark '8.5' ; $SED -e 's_\__X_' lines1
481 1.1 cgd mark '8.6' ; $SED -e 's/./(&)/g' lines1
482 1.1 cgd mark '8.7' ; $SED -e 's/./(\&)/g' lines1
483 1.1 cgd mark '8.8' ; $SED -e 's/\(.\)\(.\)\(.\)/x\3x\2x\1/g' lines1
484 1.1 cgd mark '8.9' ; $SED -e 's/_/u0\
485 1.1 cgd u1\
486 1.1 cgd u2/g' lines1
487 1.1 cgd mark '8.10'
488 1.1 cgd if [ $BSD -eq 1 -o $GNU -eq 1 ] ; then
489 1.1 cgd echo 'BSD/GNU sed do not understand digit flags on s commands'
490 1.1 cgd fi
491 1.1 cgd $SED -e 's/./X/4' lines1
492 1.1 cgd rm -f lines4
493 1.1 cgd mark '8.11' ; $SED -e 's/1/X/w lines4' lines1
494 1.1 cgd echo s wfile results
495 1.1 cgd cat lines4
496 1.1 cgd mark '8.12' ; $SED -e 's/[123]/X/g' lines1
497 1.1 cgd mark '8.13' ; $SED -e 'y/0123456789/9876543210/' lines1
498 1.1 cgd mark '8.14' ;
499 1.1 cgd if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
500 1.1 cgd echo BSD/GNU/SUN sed fail this test
501 1.1 cgd else
502 1.1 cgd $SED -e 'y10\123456789198765432\101' lines1
503 1.1 cgd fi
504 1.1 cgd mark '8.15' ; $SED -e '1N;2y/\n/X/' lines1
505 1.1 cgd mark '8.16'
506 1.1 cgd if [ $BSD -eq 1 ] ; then
507 1.1 cgd echo 'BSD sed does not handle branch defined REs'
508 1.1 cgd else
509 1.1 cgd echo 'eeefff' | $SED -e 'p' -e 's/e/X/p' -e ':x' \
510 1.1 cgd -e 's//Y/p' -e '/f/bx'
511 1.1 cgd fi
512 1.1 cgd }
513 1.1 cgd
514 1.1 cgd test_error()
515 1.1 cgd {
516 1.4 uwe exec 3<&0 4>&1 5>&2
517 1.1 cgd exec 0</dev/null
518 1.1 cgd exec 2>&1
519 1.1 cgd set -x
520 1.1 cgd $TEST -x && exit 1
521 1.1 cgd $TEST -f && exit 1
522 1.1 cgd $TEST -e && exit 1
523 1.1 cgd $TEST -f /dev/dds && exit 1
524 1.1 cgd $TEST p /dev/dds && exit 1
525 1.1 cgd $TEST -f /bin/sh && exit 1
526 1.1 cgd $TEST '{' && exit 1
527 1.1 cgd $TEST '{' && exit 1
528 1.1 cgd $TEST '/hello/' && exit 1
529 1.1 cgd $TEST '1,/hello/' && exit 1
530 1.1 cgd $TEST -e '-5p' && exit 1
531 1.1 cgd $TEST '/jj' && exit 1
532 1.1 cgd $TEST 'a hello' && exit 1
533 1.1 cgd $TEST 'a \ hello' && exit 1
534 1.1 cgd $TEST 'b foo' && exit 1
535 1.1 cgd $TEST 'd hello' && exit 1
536 1.1 cgd $TEST 's/aa' && exit 1
537 1.1 cgd $TEST 's/aa/' && exit 1
538 1.1 cgd $TEST 's/a/b' && exit 1
539 1.1 cgd $TEST 's/a/b/c/d' && exit 1
540 1.1 cgd $TEST 's/a/b/ 1 2' && exit 1
541 1.1 cgd $TEST 's/a/b/ 1 g' && exit 1
542 1.1 cgd $TEST 's/a/b/w' && exit 1
543 1.1 cgd $TEST 'y/aa' && exit 1
544 1.1 cgd $TEST 'y/aa/b/' && exit 1
545 1.1 cgd $TEST 'y/aa/' && exit 1
546 1.1 cgd $TEST 'y/a/b' && exit 1
547 1.1 cgd $TEST 'y/a/b/c/d' && exit 1
548 1.1 cgd $TEST '!' && exit 1
549 1.1 cgd $TEST supercalifrangolisticexprialidociussupercalifrangolisticexcius
550 1.1 cgd set +x
551 1.4 uwe exec 0<&3 1>&4 2>&5
552 1.1 cgd }
553 1.1 cgd
554 1.1 cgd main
555