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