bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

possible sed problem(s)...


From: George . R . Goffe
Subject: possible sed problem(s)...
Date: Fri, 3 Aug 2001 17:01:58 -0700

Hi there,

I'm not sure that I've found a bug or not. The sed version is 3.02. I've
included 2 scripts that illustrate where my confusion lies.

The script below is named tst1. The first echo? statement works as expected
but the second one does NOT. The only difference is the use of a double
quote in the first one and a single quote on the second one. Am I missing
something here?


#!/bin/sh -xv

 echo 12345 | sed -e"/^1/a\\
6789"

 echo 12345 | sed -e'/^1/a\\
6789'

 exit 0




This script is named tst2. I'm trying to do some minor surgery on a
Makefile which I've also included. In the sed commands (-e) I'm in some
cases substituting and in other cases appending lines. At least I'm
attempting to append lines. I keep getting a message about extra
characters.


Here's the execution of tst2:


./tst2
#!/bin/sh -xv

 sysver=`uname -s`
+ uname -s
sysver=SunOS
 syslvl=`uname -r`
+ uname -r
syslvl=5.8

 osname=$sysver.$syslvl
osname=SunOS.5.8

 case $osname in
    SunOS.5.5)
       set $osname = "5.5"
       ;;
    SunOS.5.5.1)
       set $osname = "5.5.1"
       ;;
    SunOS.5.6)
       set $osname = "5.6"
       ;;
    SunOS.5.7)
       set $osname = "5.7"
       ;;
    SunOS.5.8)
       set $osname = "5.8"
       ;;
    SunOS.5.9)
       set $osname = "5.9"
       ;;
    *)
       printf "%s" 'Wrong system level encountered...'
       exit 86
 esac
+ set SunOS.5.8 = 5.8

 if [ -f Makefile ] && [ -f Makefile.dist ]
 then
    echo "can't make Makefile.dist 'cause it already exists..."
    ls -al Makefile Makefile.dist
    exit 0
 else
    mv Makefile Makefile.dist
    cat Makefile.dist |                 \
       sed -e"/^CC = cc/address@hidden@Gcc -m64@"         \
           -e"/^CFLAGS = $(DEFS) -O/address@hidden@g -O2@"         \
           -e"/^instSunOS5/a\\
INSTALL = /usr/ucb/install"             \
           -e"/^ETCDIR = /local/etc/address@hidden = /local/address@hidden =
/usr/lsd/$osname/sbin@"              \
           -e"/^MANDIR = /local/man/man1/address@hidden = 
/local/man/address@hidden
= /usr/lsd/$osname/man/man1@"                \
           -e"/^MANDIR/a\\
MANMODE = 644"          \
           -e"/^MANDIR/a\\
MANSECT = 1"            \
           -e"/^install:/a\\
        $(INSTALL) -m $(MODE) -o $(OWNER) -g $(GROUP) scsiping $(BINDIR)"
\
           -e"/^install.man:/a\\
        $(INSTALL) -m $(MANMODE) -o $(OWNER) -g $(GROUP) scsiping.1
$(MANDIR)/scsiping.$(MANSECT)"              \
           > Makefile
    fi
+ [ -f Makefile ]
+ [ -f Makefile.dist ]
+ mv Makefile Makefile.dist
+ cat Makefile.dist
+ sed -e/^CC = cc/address@hidden@Gcc -m64@ -e/^CFLAGS = $(DEFS) 
-O/address@hidden@g -O2@
-e/^instSunOS5/a\
INSTALL = /usr/ucb/install -e/^ETCDIR = /local/etc/address@hidden =
/local/address@hidden = /usr/lsd/SunOS.5.8/sbin@ -e/^MANDIR =
/local/man/man1/address@hidden = /local/man/address@hidden =
/usr/lsd/SunOS.5.8/man/man1@ -e/^MANDIR/a\
MANMODE = 644 -e/^MANDIR/a\
MANSECT = 1 -e/^install:/a\
        $(INSTALL) -m $(MODE) -o $(OWNER) -g $(GROUP) scsiping $(BINDIR)
-e/^install.man:/a\
        $(INSTALL) -m $(MANMODE) -o $(OWNER) -g $(GROUP) scsiping.1
$(MANDIR)/scsiping.$(MANSECT)
sed: -e expression #4, char 14: Extra characters after command

 make clean
+ make clean
make: *** No rule to make target `clean'.  Stop.

 make depend
+ make depend
make: *** No rule to make target `depend'.  Stop.

 make
+ make
make: *** No targets.  Stop.

#make install install.man

 exit 0
+ exit 0



Here is tst2 itself:



#!/bin/sh -xv

 sysver=`uname -s`
 syslvl=`uname -r`

 osname=$sysver.$syslvl

 case $osname in
    SunOS.5.5)
       set $osname = "5.5"
       ;;
    SunOS.5.5.1)
       set $osname = "5.5.1"
       ;;
    SunOS.5.6)
       set $osname = "5.6"
       ;;
    SunOS.5.7)
       set $osname = "5.7"
       ;;
    SunOS.5.8)
       set $osname = "5.8"
       ;;
    SunOS.5.9)
       set $osname = "5.9"
       ;;
    *)
       printf "%s" 'Wrong system level encountered...'
       exit 86
 esac

 if [ -f Makefile ] && [ -f Makefile.dist ]
 then
    echo "can't make Makefile.dist 'cause it already exists..."
    ls -al Makefile Makefile.dist
    exit 0
 else
    mv Makefile Makefile.dist
    cat Makefile.dist |             \
       sed -e"/^CC = cc/address@hidden@Gcc -m64@"       \
           -e"/^CFLAGS = $(DEFS) -O/address@hidden@g -O2@"          \
           -e"/^instSunOS5/a\\
INSTALL = /usr/ucb/install"         \
           -e"/^ETCDIR = /local/etc/address@hidden = /local/address@hidden =
/usr/lsd/$osname/sbin@"        \
           -e"/^MANDIR = /local/man/man1/address@hidden = 
/local/man/address@hidden
= /usr/lsd/$osname/man/man1@"       \
           -e"/^MANDIR/a\\
MANMODE = 644"       \
           -e"/^MANDIR/a\\
MANSECT = 1"         \
           -e"/^install:/a\\
      $(INSTALL) -m $(MODE) -o $(OWNER) -g $(GROUP) scsiping $(BINDIR)"
      \
           -e"/^install.man:/a\\
      $(INSTALL) -m $(MANMODE) -o $(OWNER) -g $(GROUP) scsiping.1
$(MANDIR)/scsiping.$(MANSECT)"      \
           > Makefile
    fi

 make clean

 make depend

 make

#make install install.man

 exit 0




Here is the Makefile:


# OS_UNAME = Sun0S4 || Sun0S5
OS_UNAME :sh = uname -s -r | sed 's/ //g;s/\..*//'

CC = cc
INCLUDEDIRS =
LIBRARIES =
DEFS =     # -DFORMATDAT to get format.dat generation; not recommended.
CFLAGS = $(DEFS) -O $(INCLUDEDIRS)
LDFLAGS =
LINTFLAGS = $(DEFS) -ha $(INCLUDEDIRS)
SRCS = scsiping.c
OBJS = $(SRCS:.c=.o)
RM = /bin/rm -rf
# INSTALL = /usr/bin/install or /usr/ucb/install for Solaris 2.x
instSunOS4 instmanSunOS4 := INSTALL = /usr/bin/install
instSunOS5 instmanSunOS5 := INSTALL = /usr/ucb/install

ETCDIR = /local/etc
MANDIR = /local/man/man1
#
# Set MODE to 4755, if you want this to run setuid root. Set to 2755
# if you want this to run setgroupid operator (4.x) or sys (5.x).
# It has to be setuid root for Solaris 5.3 if you want users other than
# root to use it.
#
MODE = 755
OWNER = root
# GROUP = operator or sys for 5.x
instSunOS4 := GROUP = operator
instSunOS5 := GROUP = sys

all:: scsiping

scsiping: $(OBJS)
      $(RM) $@
      $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBRARIES)
lint:
      lint $(LINTFLAGS) $(SRCS)
lintport:
      lint -p $(LINTFLAGS) $(SRCS)
clean:
      rm -f $(OBJS) scsiping
depend:
      makedepend -- $(CFLAGS) -- $(SRCS)

install: $(OS_UNAME:%=inst%)

install.man: $(OS_UNAME:%=instman%)

instSunOS4 instSunOS5: scsiping
      $(INSTALL) -s -m $(MODE) -o $(OWNER) -g $(GROUP) scsiping $(ETCDIR)

instmanSunOS4 instmanSunOS5: scsiping.1
      $(INSTALL) -m 644 scsiping.1 $(MANDIR)

shar:
      shar COPYRIGHT MANIFEST README patchlevel.h Makefile scsiping.1 \
      scsiping.c >scsiping.shar

# DO NOT DELETE THIS LINE -- make depend depends on it.
scsiping.o:     patchlevel.h






reply via email to

[Prev in Thread] Current Thread [Next in Thread]