[nycbug-talk] sed Question

Gordon Smith g at bin-arts.com
Thu Mar 30 18:40:40 EST 2006


Kev,

Instead of attempting to put the shell variable in the midst of the sed
commandline,  you may want to build the complete commandline string within
another variable.  Concatenate the value of $fastest onto the string
representing the complete commandline.  You could then run the commandline
using either eval or exec.  Although it looks like you might want to use
eval, check out the man pages for each to see which is more appropriate to
your case.

For example, in my environment, the env var $VISUAL is set to "vi".  From
the shell prompt, If I wanted to edit the file "newfile" the hard way, I
might execute these commands:

$ commandline="$VISUAL newfile"
$ echo $commandline
vi newfile
$ eval $commandline
~
~
~
newfile: new file: line 1
(vi is displayed in all its spartan glory...)

Hope this helps - please let me know how it works for you.

Cheers,
Gordon

-----Original Message-----
From: talk-bounces at lists.nycbug.org [mailto:talk-bounces at lists.nycbug.org]
On Behalf Of Kevin Reiter
Sent: Thursday, March 30, 2006 5:53 PM
To: NYCBUG Talk
Subject: [nycbug-talk] sed Question

All,

I know there are a few scripting gurus on this list who might be able to 
help me out with this..

I'm trying to write a script that does the following:

1. Runs 'fastest_cvsup -c us' to find the fastest cvsup server
2. Assigns the value of "server.txt" (which is the fastest server) to a 
variable and then searches my "ports-sup" file for the existing server, 
and replaces it with the new one.

Sofar, everything works fine until I get to the replacement part of the 
script.

Here's the script:

#!/bin/sh

echo ""
echo "Finding the fastest cvsup server."
echo ""
fastest_cvsup -c us | grep 1st | cut -d : -f 2 > server.txt
sed 's/^[ \t]*//' server.txt > fast.txt
fastest=`cat fast.txt`
echo ""
echo "The fastest server seems to be: $fastest"
echo ""
echo ""
echo "Here we actually modify the file using sed."
echo ""
sed '2s/cvsup*.FreeBSD.org/$fastest/' ports-sup
echo ""
echo Done.
rm server.txt
rm fast.txt

I've tried replacing '$fastest' with 'BLAH' and I'm still doing 
something wrong, but I don't know what.  I've been hitting Google pretty 
hard for a few days looking for some examples/pointers (which has gotten 
me this far) to no avail.

I'm looking to replace:

*default host=cvsup11.FreeBSD.org

with:

*default host=cvsup##.FreeBSD.org (where ## is the actual number, like 2 
or 14 or whatever.)

Any ideas, or pointers to let me know what I'm doing wrong?

Thanks,
Kev
_______________________________________________
% NYC*BUG talk mailing list
http://lists.nycbug.org/mailman/listinfo/talk
%Be sure to check out our Jobs and NYCBUG-announce lists
%We meet the first Wednesday of the month




More information about the talk mailing list