Date: Tue, 25 Sep 2001 09:27:55 -0400 From: Brian T.Schellenberger <bts@babbleon.org> To: Salvo Bartolotta <bartequi@neomedia.it>, Giorgos Keramidas <charon@labs.gr> Cc: Mark Rowlands <mark.rowlands@minmail.net>, freebsd-questions@FreeBSD.ORG Subject: Re: silly sed question Message-ID: <01092509275503.00814@i8k.babbleon.org> In-Reply-To: <1001421024.3bb078e00bc61@webmail.neomedia.it> References: <1001421024.3bb078e00bc61@webmail.neomedia.it>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 25 September 2001 08:30, Salvo Bartolotta wrote:
> > You are probably being bitten by TCSH's stupid quoting, which I NEVER
> > actually managed to get the grip of. I tried testing this on sh(1), and
> > here's what I came up with:
> >
> > $ cat myfile
> > TARGETS='blob1 blob2 blob3'
> > $ sed -e "/^TARGETS/ s/\'$/ blob4\'/" myfile
> > TARGETS='blob1 blob2 blob3 blob4'
>
> Yep, I am afraid you are right: it is tcsh. And I was somewhat cryptic in
> my previous message. Sorry.
Here's what I do to work around this.
In startup scripts, I
setenv S '$'
setenv Q "'"
setenv QQ '"'
Then I do things like this with
sed -e "/^TARGETS/ s/$Q$S/ blob4$Q/" myfile
Good luck.
>
> IIUC, the quoting game should be played as illustrated in the following
> examples:
>
>
> 377 2:10pm ~/trial >====> echo $SHELL
> /bin/tcsh
>
>
> 378 2:11pm ~/trial >====> cat example
> TARGETS='blob1 blob2 blob3'
> 'blob5 blob6 blob7'
>
>
> 379 2:11pm ~/trial >====> sed -e '/^TARGETS=/s/'\''$/ blob4'\''/' example
> TARGETS='blob1 blob2 blob3 blob4'
> 'blob5 blob6 blob7'
>
> # Single quotes: beware of the `'' character.
> # Notice the matching pairs of `''.
>
>
>
> 380 2:11pm ~/trial >====> sed -e "/^TARGETS=/s/'"\$"/ blob4'/" example
> TARGETS='blob1 blob2 blob3 blob4'
> 'blob5 blob6 blob7'
>
> # Double quotes: beware of `$'.
> # Notice the matching pairs of `"'.
> # `'' needs no escaping inside double quotes.
> # In tcsh, this is a simple way to work around the "illegal variable
> error".
>
>
> However, in sh:
>
> $ cat example
> TARGETS='blob1 blob2 blob3'
> 'blob5 blob6 blob7'
>
>
> $ sed -e '/^TARGETS=/s/'\''$/ blob4'\''/' example
> TARGETS='blob1 blob2 blob3 blob4'
> 'blob5 blob6 blob7'
>
> # Single quotes: beware of the `'' character.
> # Notice the matching pairs of `''.
>
>
> $ sed -e "/^TARGETS=/s/'$/ blob4'/" example
> TARGETS='blob1 blob2 blob3 blob4'
> 'blob5 blob6 blob7'
>
> # `'' inside double quotes needs no escaping.
> # A $-keyed variable inside double quotes is normally expanded.
> #
> # Double quotes: in this command, `'' and `$' cause no problem.
> # As to the present example, this is probably the simplest form of the
> command.
>
> -- Salvo (going out and sed'ing someone :-))
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-questions" in the body of the message
--
Brian T. Schellenberger . . . . . . . bts@wnt.sas.com (work)
Brian, the man from Babble-On . . . . bts@babbleon.org (personal)
http://www.babbleon.org
--------------------> Free Dmitry Sklyarov! <-------------------------
http://www.eff.org http://www.programming-freedom.org
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?01092509275503.00814>
