1 1.1 cgd #!/bin/sh - 2 1.5 christos # $NetBSD: sed.test,v 1.5 2011/11/12 03:15:05 christos 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.5 christos # $NetBSD: sed.test,v 1.5 2011/11/12 03:15:05 christos 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.5 christos BASE=/usr/bin/sed 49 1.1 cgd BASELOG=sed.out 50 1.5 christos TEST=$(cd $(dirname $0)/.. && make -V .OBJDIR)/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.5 christos 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