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