multi_test.sh revision 263227
155682Smarkm#!/bin/sh - 255682Smarkm# 355682Smarkm# Copyright (c) 1992 Diomidis Spinellis. 455682Smarkm# Copyright (c) 1992, 1993 555682Smarkm# The Regents of the University of California. All rights reserved. 655682Smarkm# 755682Smarkm# Redistribution and use in source and binary forms, with or without 855682Smarkm# modification, are permitted provided that the following conditions 955682Smarkm# are met: 1055682Smarkm# 1. Redistributions of source code must retain the above copyright 1155682Smarkm# notice, this list of conditions and the following disclaimer. 1255682Smarkm# 2. Redistributions in binary form must reproduce the above copyright 1355682Smarkm# notice, this list of conditions and the following disclaimer in the 1455682Smarkm# documentation and/or other materials provided with the distribution. 1555682Smarkm# 4. Neither the name of the University nor the names of its contributors 1655682Smarkm# may be used to endorse or promote products derived from this software 1755682Smarkm# without specific prior written permission. 1855682Smarkm# 1955682Smarkm# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2055682Smarkm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2155682Smarkm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2255682Smarkm# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2355682Smarkm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2455682Smarkm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2555682Smarkm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2655682Smarkm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2755682Smarkm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2855682Smarkm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2955682Smarkm# SUCH DAMAGE. 3055682Smarkm# 3155682Smarkm# @(#)sed.test 8.1 (Berkeley) 6/6/93 3255682Smarkm# 3355682Smarkm# $FreeBSD: head/usr.bin/sed/tests/multi_test.sh 263227 2014-03-16 08:04:06Z jmmv $ 3455682Smarkm# 3555682Smarkm 3655682Smarkm# sed Regression Tests 3755682Smarkm# 3855682Smarkm# The directory regress.test.out contains the expected test results 3955682Smarkm# 4055682Smarkm# These are the regression tests mostly created during the development 4155682Smarkm# of the BSD sed. Each test should have a unique mark name, which is 4255682Smarkm# used for naming the corresponding file in regress.multitest.out. 4355682Smarkm 4455682SmarkmSRCDIR=$(dirname $0) 4555682Smarkm 4655682Smarkmmain() 4755682Smarkm{ 4855682Smarkm REGRESS=${SRCDIR}/regress.multitest.out 4955682Smarkm DICT=/usr/share/dict/words 5055682Smarkm 5155682Smarkm awk 'END { for (i = 1; i < 15; i++) print "l1_" i}' </dev/null >lines1 5255682Smarkm awk 'END { for (i = 1; i < 10; i++) print "l2_" i}' </dev/null >lines2 5355682Smarkm 5455682Smarkm echo "1..129" 5555682Smarkm 5655682Smarkm exec 4>&1 5>&2 5755682Smarkm tests 5855682Smarkm exec 1>&4 2>&5 5955682Smarkm 6055682Smarkm # Remove temporary files 6155682Smarkm rm -f current.out lines[1-4] script[1-2] 6255682Smarkm} 6355682Smarkm 6455682Smarkmtests() 6555682Smarkm{ 6655682Smarkm SED=sed 6755682Smarkm MARK=0 6855682Smarkm 6955682Smarkm test_args 7055682Smarkm test_addr 7155682Smarkm test_group 7255682Smarkm test_acid 7355682Smarkm test_branch 7455682Smarkm test_pattern 7555682Smarkm test_print 7655682Smarkm test_subst 7755682Smarkm test_error 7855682Smarkm # Handle the result of the last test 7955682Smarkm result 8055682Smarkm} 8155682Smarkm 8255682Smarkm# Display a test's result 8355682Smarkmresult() 8455682Smarkm{ 8555682Smarkm if [ "$TODO" = '1' ] ; then 8655682Smarkm TODO='TODO ' 8755682Smarkm else 8855682Smarkm TODO='' 8955682Smarkm fi 9055682Smarkm if ! [ -r $REGRESS/${TESTNAME} ] ; then 9155682Smarkm echo "Seeding $REGRESS/${TESTNAME} with current result" 1>&2 9255682Smarkm cp current.out $REGRESS/${TESTNAME} 9355682Smarkm fi 9455682Smarkm if diff -c $REGRESS/${TESTNAME} current.out ; then 9555682Smarkm echo "ok $MARK $TESTNAME # $TODO$COMMENT" 9655682Smarkm else 9755682Smarkm echo "not ok $MARK $TESTNAME # $TODO$COMMENT" 9855682Smarkm fi 1>&4 2>&5 9955682Smarkm} 10055682Smarkm 10155682Smarkm# Mark the beginning of each test 10255682Smarkmmark() 10355682Smarkm{ 10455682Smarkm [ $MARK -gt 0 ] && result 10555682Smarkm MARK=`expr $MARK + 1` 10655682Smarkm TESTNAME=$1 10755682Smarkm exec 1>&4 2>&5 10855682Smarkm exec >"current.out" 10955682Smarkm} 11055682Smarkm 11155682Smarkmtest_args() 11255682Smarkm{ 11355682Smarkm COMMENT='Argument parsing - first type' 11455682Smarkm mark '1.1' 11555682Smarkm $SED 's/^/e1_/p' lines1 11655682Smarkm mark '1.2' ; $SED -n 's/^/e1_/p' lines1 11755682Smarkm mark '1.3' 11855682Smarkm $SED 's/^/e1_/p' <lines1 11955682Smarkm mark '1.4' ; $SED -n 's/^/e1_/p' <lines1 12055682Smarkm COMMENT='Argument parsing - second type' 12155682Smarkm mark '1.4.1' 12255682Smarkm $SED -e '' <lines1 12355682Smarkm echo 's/^/s1_/p' >script1 12455682Smarkm echo 's/^/s2_/p' >script2 12555682Smarkm mark '1.5' 12655682Smarkm $SED -f script1 lines1 12755682Smarkm mark '1.6' 12855682Smarkm $SED -f script1 <lines1 12955682Smarkm mark '1.7' 13055682Smarkm $SED -e 's/^/e1_/p' lines1 13155682Smarkm mark '1.8' 13255682Smarkm $SED -e 's/^/e1_/p' <lines1 13355682Smarkm mark '1.9' ; $SED -n -f script1 lines1 13455682Smarkm mark '1.10' ; $SED -n -f script1 <lines1 13555682Smarkm mark '1.11' ; $SED -n -e 's/^/e1_/p' lines1 13655682Smarkm mark '1.12' 13755682Smarkm $SED -n -e 's/^/e1_/p' <lines1 13855682Smarkm mark '1.13' 13955682Smarkm $SED -e 's/^/e1_/p' -e 's/^/e2_/p' lines1 14055682Smarkm mark '1.14' 14155682Smarkm $SED -f script1 -f script2 lines1 14255682Smarkm mark '1.15' 14355682Smarkm $SED -e 's/^/e1_/p' -f script1 lines1 14455682Smarkm mark '1.16' 14555682Smarkm $SED -e 's/^/e1_/p' lines1 lines1 14655682Smarkm # POSIX D11.2:11251 14755682Smarkm mark '1.17' ; $SED p <lines1 lines1 14855682Smarkmcat >script1 <<EOF 14955682Smarkm#n 15055682Smarkm# A comment 15155682Smarkm 15255682Smarkmp 15355682SmarkmEOF 15455682Smarkm mark '1.18' ; $SED -f script1 <lines1 lines1 15555682Smarkm} 15655682Smarkm 15755682Smarkmtest_addr() 15855682Smarkm{ 15955682Smarkm COMMENT='Address ranges' 16055682Smarkm mark '2.1' ; $SED -n -e '4p' lines1 16155682Smarkm mark '2.2' ; $SED -n -e '20p' lines1 lines2 16255682Smarkm mark '2.3' ; $SED -n -e '$p' lines1 16355682Smarkm mark '2.4' ; $SED -n -e '$p' lines1 lines2 16455682Smarkm mark '2.5' ; $SED -n -e '$a\ 16555682Smarkmhello' /dev/null 16655682Smarkm mark '2.6' ; $SED -n -e '$p' lines1 /dev/null lines2 16755682Smarkm # Should not print anything 16855682Smarkm mark '2.7' ; $SED -n -e '20p' lines1 16955682Smarkm mark '2.8' ; $SED -n -e '/NOTFOUND/p' lines1 17055682Smarkm mark '2.9' ; $SED -n '/l1_7/p' lines1 17155682Smarkm mark '2.10' ; $SED -n ' /l1_7/ p' lines1 17255682Smarkm mark '2.11' ; $SED -n '\_l1\_7_p' lines1 17355682Smarkm mark '2.12' ; $SED -n '1,4p' lines1 17455682Smarkm mark '2.13' ; $SED -n '1,$p' lines1 lines2 17555682Smarkm mark '2.14' ; $SED -n '1,/l2_9/p' lines1 lines2 17655682Smarkm mark '2.15' ; $SED -n '/4/,$p' lines1 lines2 17755682Smarkm mark '2.16' ; $SED -n '/4/,20p' lines1 lines2 17855682Smarkm mark '2.17' ; $SED -n '/4/,/10/p' lines1 lines2 17955682Smarkm mark '2.18' ; $SED -n '/l2_3/,/l1_8/p' lines1 lines2 18055682Smarkm mark '2.19' ; $SED -n '12,3p' lines1 lines2 18155682Smarkm mark '2.20' ; $SED -n '/l1_7/,3p' lines1 lines2 18255682Smarkm mark '2.21' ; $SED -n '13,+4p' lines1 lines2 18355682Smarkm mark '2.22' ; $SED -n '/l1_6/,+2p' lines1 lines2 18455682Smarkm} 18555682Smarkm 18655682Smarkmtest_group() 18755682Smarkm{ 18855682Smarkm COMMENT='Brace and other grouping' 18955682Smarkm mark '3.1' ; $SED -e ' 19055682Smarkm4,12 { 19155682Smarkm s/^/^/ 19255682Smarkm s/$/$/ 19355682Smarkm s/_/T/ 19455682Smarkm}' lines1 19555682Smarkm mark '3.2' ; $SED -e ' 19655682Smarkm4,12 { 19755682Smarkm s/^/^/ 19855682Smarkm /6/,/10/ { 19955682Smarkm s/$/$/ 20055682Smarkm /8/ s/_/T/ 20155682Smarkm } 20255682Smarkm}' lines1 20355682Smarkm mark '3.3' ; $SED -e ' 20455682Smarkm4,12 !{ 20555682Smarkm s/^/^/ 20655682Smarkm /6/,/10/ !{ 20755682Smarkm s/$/$/ 20855682Smarkm /8/ !s/_/T/ 20955682Smarkm } 21055682Smarkm}' lines1 21155682Smarkm mark '3.4' ; $SED -e '4,12!s/^/^/' lines1 21255682Smarkm} 21355682Smarkm 21455682Smarkmtest_acid() 21555682Smarkm{ 21655682Smarkm COMMENT='Commands a c d and i' 21755682Smarkm mark '4.1' ; $SED -n -e ' 21855682Smarkms/^/before_i/p 21955682Smarkm20i\ 22055682Smarkminserted 22155682Smarkms/^/after_i/p 22255682Smarkm' lines1 lines2 22355682Smarkm mark '4.2' ; $SED -n -e ' 22455682Smarkm5,12s/^/5-12/ 22555682Smarkms/^/before_a/p 22655682Smarkm/5-12/a\ 22755682Smarkmappended 22855682Smarkms/^/after_a/p 22955682Smarkm' lines1 lines2 23055682Smarkm mark '4.3' 23155682Smarkm $SED -n -e ' 23255682Smarkms/^/^/p 23355682Smarkm/l1_/a\ 23455682Smarkmappended 23555682Smarkm8,10N 23655682Smarkms/$/$/p 23755682Smarkm' lines1 lines2 23855682Smarkm mark '4.4' ; $SED -n -e ' 23955682Smarkmc\ 24055682Smarkmhello 24155682Smarkm' lines1 24255682Smarkm mark '4.5' ; $SED -n -e ' 24355682Smarkm8c\ 24455682Smarkmhello 24555682Smarkm' lines1 24655682Smarkm mark '4.6' ; $SED -n -e ' 24755682Smarkm3,14c\ 24855682Smarkmhello 24955682Smarkm' lines1 25055682Smarkm# SunOS and GNU sed behave differently. We follow POSIX 25155682Smarkm mark '4.7' ; $SED -n -e ' 25255682Smarkm8,3c\ 25355682Smarkmhello 25455682Smarkm' lines1 25555682Smarkm mark '4.8' ; $SED d <lines1 25655682Smarkm} 25755682Smarkm 25855682Smarkmtest_branch() 25955682Smarkm{ 26055682Smarkm COMMENT='Labels and branching' 26155682Smarkm mark '5.1' ; $SED -n -e ' 26255682Smarkmb label4 26355682Smarkm:label3 26455682Smarkms/^/label3_/p 26555682Smarkmb end 26655682Smarkm:label4 26755682Smarkm2,12b label1 26855682Smarkmb label2 26955682Smarkm:label1 27055682Smarkms/^/label1_/p 27155682Smarkmb 27255682Smarkm:label2 27355682Smarkms/^/label2_/p 27455682Smarkmb label3 27555682Smarkm:end 27655682Smarkm' lines1 27755682Smarkm mark '5.2' 27855682Smarkm $SED -n -e ' 27955682Smarkms/l1_/l2_/ 28055682Smarkmt ok 28155682Smarkmb 28255682Smarkm:ok 28355682Smarkms/^/tested /p 28455682Smarkm' lines1 lines2 28555682Smarkm# SunOS and GNU sed behave as follows: lines 9-$ aren't printed at all 28655682Smarkm mark '5.3' ; $SED -n -e ' 28755682Smarkm5,8b inside 28855682Smarkm1,5 { 28955682Smarkm s/^/^/p 29055682Smarkm :inside 29155682Smarkm s/$/$/p 29255682Smarkm} 29355682Smarkm' lines1 29455682Smarkm# Check that t clears the substitution done flag 29555682Smarkm mark '5.4' ; $SED -n -e ' 29655682Smarkm1,8s/^/^/ 29755682Smarkmt l1 29855682Smarkm:l1 29955682Smarkmt l2 30055682Smarkms/$/$/p 30155682Smarkmb 30255682Smarkm:l2 30355682Smarkms/^/ERROR/ 30455682Smarkm' lines1 30555682Smarkm# Check that reading a line clears the substitution done flag 30655682Smarkm mark '5.5' 30755682Smarkm $SED -n -e ' 30855682Smarkmt l2 30955682Smarkm1,8s/^/^/p 31055682Smarkm2,7N 31155682Smarkmb 31255682Smarkm:l2 31355682Smarkms/^/ERROR/p 31455682Smarkm' lines1 31555682Smarkm mark '5.6' ; $SED 5q lines1 31655682Smarkm mark '5.7' ; $SED -e ' 31755682Smarkm5i\ 31855682Smarkmhello 31955682Smarkm5q' lines1 32055682Smarkm# Branch across block boundary 32155682Smarkm mark '5.8' ; $SED -e ' 32255682Smarkm{ 32355682Smarkm:b 32455682Smarkm} 32555682Smarkms/l/m/ 32655682Smarkmtb' lines1 32755682Smarkm} 32855682Smarkm 32955682Smarkmtest_pattern() 33055682Smarkm{ 33155682SmarkmCOMMENT='Pattern space commands' 33255682Smarkm# Check that the pattern space is deleted 33355682Smarkm mark '6.1' ; $SED -n -e ' 33455682Smarkmc\ 33555682Smarkmchanged 33655682Smarkmp 33755682Smarkm' lines1 33855682Smarkm mark '6.2' ; $SED -n -e ' 33955682Smarkm4d 34055682Smarkmp 34155682Smarkm' lines1 34255682Smarkm mark '6.3' 34355682Smarkm $SED -e 'N;N;N;D' lines1 34455682Smarkm mark '6.4' ; $SED -e ' 34555682Smarkm2h 34655682Smarkm3H 34755682Smarkm4g 34855682Smarkm5G 34955682Smarkm6x 35055682Smarkm6p 35155682Smarkm6x 35255682Smarkm6p 35355682Smarkm' lines1 35455682Smarkm mark '6.5' ; $SED -e '4n' lines1 35555682Smarkm mark '6.6' ; $SED -n -e '4n' lines1 35655682Smarkm} 35755682Smarkm 35855682Smarkmtest_print() 35955682Smarkm{ 36055682Smarkm COMMENT='Print and file routines' 36155682Smarkm awk 'END {for (i = 1; i < 256; i++) printf("%c", i);print "\n"}' \ 36255682Smarkm </dev/null >lines3 36355682Smarkm # GNU and SunOS sed behave differently here 36455682Smarkm mark '7.1' 36555682Smarkm $SED -n l lines3 36655682Smarkm mark '7.2' ; $SED -e '/l2_/=' lines1 lines2 36755682Smarkm rm -f lines4 36855682Smarkm mark '7.3' ; $SED -e '3,12w lines4' lines1 36955682Smarkm COMMENT='w results' 37055682Smarkm cat lines4 37155682Smarkm mark '7.4' ; $SED -e '4r lines2' lines1 37255682Smarkm mark '7.5' ; $SED -e '5r /dev/dds' lines1 37355682Smarkm mark '7.6' ; $SED -e '6r /dev/null' lines1 37455682Smarkm mark '7.7' 37555682Smarkm sed '200q' $DICT | sed 's$.*$s/^/&/w tmpdir/&$' >script1 37655682Smarkm rm -rf tmpdir 37755682Smarkm mkdir tmpdir 37855682Smarkm $SED -f script1 lines1 37955682Smarkm cat tmpdir/* 38055682Smarkm rm -rf tmpdir 38155682Smarkm mark '7.8' 38255682Smarkm echo line1 > lines3 38355682Smarkm echo "" >> lines3 38455682Smarkm TODO=1 38555682Smarkm $SED -n -e '$p' lines3 /dev/null 38655682Smarkm 38755682Smarkm} 38855682Smarkm 38955682Smarkmtest_subst() 39055682Smarkm{ 39155682Smarkm COMMENT='Substitution commands' 39255682Smarkm mark '8.1' ; $SED -e 's/./X/g' lines1 39355682Smarkm mark '8.2' ; $SED -e 's,.,X,g' lines1 39455682Smarkm# SunOS sed thinks we are escaping . as wildcard, not as separator 39555682Smarkm mark '8.3' 39655682Smarkm $SED -e 's.\..X.g' lines1 39755682Smarkm mark '8.4' ; $SED -e 's/[\/]/Q/' lines1 39855682Smarkm mark '8.5' ; $SED -e 's_\__X_' lines1 39955682Smarkm mark '8.6' ; $SED -e 's/./(&)/g' lines1 40055682Smarkm mark '8.7' ; $SED -e 's/./(\&)/g' lines1 40155682Smarkm mark '8.8' ; $SED -e 's/\(.\)\(.\)\(.\)/x\3x\2x\1/g' lines1 40255682Smarkm mark '8.9' ; $SED -e 's/_/u0\ 40355682Smarkmu1\ 40455682Smarkmu2/g' lines1 40555682Smarkm mark '8.10' 40655682Smarkm $SED -e 's/./X/4' lines1 40755682Smarkm rm -f lines4 40855682Smarkm mark '8.11' ; $SED -e 's/1/X/w lines4' lines1 40955682Smarkm COMMENT='s wfile results' 41055682Smarkm cat lines4 41155682Smarkm mark '8.12' ; $SED -e 's/[123]/X/g' lines1 41255682Smarkm mark '8.13' ; $SED -e 'y/0123456789/9876543210/' lines1 41355682Smarkm mark '8.14' ; 41455682Smarkm $SED -e 'y10\123456789198765432\101' lines1 41555682Smarkm mark '8.15' ; $SED -e '1N;2y/\n/X/' lines1 41655682Smarkm mark '8.16' 41755682Smarkm echo 'eeefff' | $SED -e ' 41855682Smarkm p 41955682Smarkm s/e/X/p 42055682Smarkm :x 42155682Smarkm s//Y/p 42255682Smarkm # Establish limit counter in the hold space 42355682Smarkm # GNU sed version 3.02 enters into an infinite loop here 42455682Smarkm x 42555682Smarkm /.\{10\}/ { 42655682Smarkm s/.*/ERROR/ 42755682Smarkm b 42855682Smarkm } 42955682Smarkm s/.*/&./ 43055682Smarkm x 43155682Smarkm /f/bx 43255682Smarkm ' 43355682Smarkm # POSIX does not say that this should work, 43455682Smarkm # but it does for GNU, BSD, and SunOS 43555682Smarkm mark '8.17' ; $SED -e 's/[/]/Q/' lines1 43655682Smarkm 43755682Smarkm COMMENT='[ as an s delimiter and its escapes' 43855682Smarkm mark '8.18' ; $SED -e 's[_[X[' lines1 43955682Smarkm # This is a matter of interpretation 44055682Smarkm # POSIX 1003.1, 2004 says "Within the BRE and the replacement, 44155682Smarkm # the BRE delimiter itself can be used as a *literal* character 44255682Smarkm # if it is preceded by a backslash" 44355682Smarkm # SunOS 5.1 /usr/bin/sed and Mac OS X follow the literal POSIX 44455682Smarkm # interpretation. 44555682Smarkm # GNU sed version 4.1.5 treats \[ as the beginning of a character 44655682Smarkm # set specification (both with --posix and without). 44755682Smarkm mark '8.19' ; sed 's/l/[/' lines1 | $SED -e 's[\[.[X[' 44855682Smarkm mark '8.20' ; sed 's/l/[/' lines1 | $SED -e 's[\[.[X\[[' 44955682Smarkm COMMENT='\ in y command' 45055682Smarkm mark '8.21' 45155682Smarkm echo 'a\b(c' | 45255682Smarkm $SED 'y%ABCDEFGHIJKLMNOPQRSTUVWXYZ, /\\()"%abcdefghijklmnopqrstuvwxyz,------%' 45355682Smarkm COMMENT='\n in a character class and a BRE' 45455682Smarkm mark '8.22' ; (echo 1; echo 2) | $SED -n '1{;N;s/[\n]/X/;p;}' 45555682Smarkm mark '8.23' ; (echo 1; echo 2) | $SED -n '1{;N;s/\n/X/;p;}' 45655682Smarkm} 45755682Smarkm 45855682Smarkmtest_error() 45955682Smarkm{ 46055682Smarkm COMMENT='Error cases' 46155682Smarkm mark '9.1' ; $SED -x 2>/dev/null ; echo $? 46255682Smarkm mark '9.2' ; $SED -f 2>/dev/null ; echo $? 46355682Smarkm mark '9.3' ; $SED -e 2>/dev/null ; echo $? 46455682Smarkm mark '9.4' ; $SED -f /dev/xyzzyxyzy 2>/dev/null ; echo $? 46555682Smarkm mark '9.5' ; $SED p /dev/xyzzyxyzy 2>/dev/null ; echo $? 46655682Smarkm mark '9.6' ; $SED -f /bin/sh 2>/dev/null ; echo $? 46755682Smarkm mark '9.7' ; $SED '{' 2>/dev/null ; echo $? 46855682Smarkm mark '9.8' ; $SED '{' 2>/dev/null ; echo $? 46955682Smarkm mark '9.9' ; $SED '/hello/' 2>/dev/null ; echo $? 47055682Smarkm mark '9.10' ; $SED '1,/hello/' 2>/dev/null ; echo $? 47155682Smarkm mark '9.11' ; $SED -e '-5p' 2>/dev/null ; echo $? 47255682Smarkm mark '9.12' ; $SED '/jj' 2>/dev/null ; echo $? 47355682Smarkm mark '9.13' ; $SED 'a hello' 2>/dev/null ; echo $? 47455682Smarkm mark '9.14' ; $SED 'a \ hello' 2>/dev/null ; echo $? 47555682Smarkm mark '9.15' ; $SED 'b foo' 2>/dev/null ; echo $? 47655682Smarkm mark '9.16' ; $SED 'd hello' 2>/dev/null ; echo $? 47755682Smarkm mark '9.17' ; $SED 's/aa' 2>/dev/null ; echo $? 47855682Smarkm mark '9.18' ; $SED 's/aa/' 2>/dev/null ; echo $? 47955682Smarkm mark '9.19' ; $SED 's/a/b' 2>/dev/null ; echo $? 48055682Smarkm mark '9.20' ; $SED 's/a/b/c/d' 2>/dev/null ; echo $? 48155682Smarkm mark '9.21' ; $SED 's/a/b/ 1 2' 2>/dev/null ; echo $? 48255682Smarkm mark '9.22' ; $SED 's/a/b/ 1 g' 2>/dev/null ; echo $? 48355682Smarkm mark '9.23' ; $SED 's/a/b/w' 2>/dev/null ; echo $? 48455682Smarkm mark '9.24' ; $SED 'y/aa' 2>/dev/null ; echo $? 48555682Smarkm mark '9.25' ; $SED 'y/aa/b/' 2>/dev/null ; echo $? 48655682Smarkm mark '9.26' ; $SED 'y/aa/' 2>/dev/null ; echo $? 48755682Smarkm mark '9.27' ; $SED 'y/a/b' 2>/dev/null ; echo $? 48855682Smarkm mark '9.28' ; $SED 'y/a/b/c/d' 2>/dev/null ; echo $? 48955682Smarkm mark '9.29' ; $SED '!' 2>/dev/null ; echo $? 49055682Smarkm mark '9.30' ; $SED supercalifrangolisticexprialidociussupercalifrangolisticexcius 2>/dev/null ; echo $? 49155682Smarkm mark '9.31' ; $SED '' /dev/null 2>/dev/null ; echo $? 49255682Smarkm} 49355682Smarkm 49455682Smarkmmain 49555682Smarkm