[Top][All Lists]
[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
- possible sed problem(s)...,
George . R . Goffe <=