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