sed with a variable


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed with a variable
# 1  
Old 06-11-2008
sed with a variable

Hi,

My shell script searches a VALUE in a file, copies it to a variable and updates a line in another file with this new VALUE (replacing the old)

The value has a pattern-
VALUE=`$$MyDate=11-11-2008 09.09.56.123456`

(yes the $ - . = and space are all part of the string)

I am having prob with sed

Which of the following should work?
a) sed 's/${oldDate}/${newDate}/' file1.txt > temp
b) sed 's/'"${oldDate}"'/'"${newDate}"'/' file1.txt > temp
c) sed "s/${oldDate}/${newDate}/" file1.txt > temp
d) sed "s#${oldDate}#${newDate}#"' file1.txt > temp
e) any other

Smiliesearching all threads i had the above noted as possible solutions but all above options i've tried and none work
is using ${xyz} instead of $xyz the prob?
or i should try again? any 1 out of (a) - (d) must work?
is it something to do with what "shell" i m using?
sorry i'm 3 days old in unix

Thanks!

Last edited by ngagemaniac; 06-11-2008 at 03:23 PM..
# 2  
Old 06-11-2008
I'd vote for the modified 'd' (unless there's a '#' embedded in either of the date variables):
Code:
sed "s#${oldDate}#${newDate}#" file1.txt > temp

# 3  
Old 06-11-2008
Thanks vgersh99

Thanks 4 d quick reply but.. Smilie
sorry i put the wrong format, date doesn't ve a / or # both(I've edited the question)
I did try all 4 options, and If someone is confident that it HAS 2b one of these i'd go try again..
Had the same prob with grep with these variables..
(Can $$ be a prob?)
# 4  
Old 06-11-2008
Your VALUE is using backticks instead of single quote characters.

Could that be the issue?

d really should work unless there was a pound sign in your ${oldDate} or ${newDate} variables.

Some more precise sample code may be helpful here.
-mschwage
# 5  
Old 06-11-2008
BTW, you should be able to answer your question: "Can ?? be a prob?"

Create a file- call it tmpfile- with the contents:
Code:
wow$$blah

Now try it:
Code:
sed -e 's#$$#foo#' tmpfile

Learn to divide your problems and conquer, and you'll end up less frustrated in the long run.

...However, though you may find that the $ is a problem, that may not help you know the magic UNIX incantation for dealing with it. The proper way to search and replace that $$ is:
Code:
sed -e 's#\$\$#foo#' tmpfile

So the way to fix your search is to enter backslash hell, and change all the $'s in your value to \$:
Code:
VALUE=`echo $VALUE | sed -e 's#\\$#\\\\$#g'`

...Makes you yearn for Perl, don't it? Smilie

In short, that $ will give you trouble because it's the regular expression construct that means "match at the end of the line". It's also recognized by the shell because it's the metacharacter that says "this thingie is a variable".

After a year or so of dealing with this sort of thing in shell, you probably will add Perl to your toolbox... Smilie Smilie Smilie Smilie
-mschwage
# 6  
Old 06-12-2008
Thanks!

Option D was right
I was using sed "s#$var1#$var2#" didn't work
on using sed "s#${var1}#${var2}#" worked
Can someone tell me why?

my var2 never had the char "/" thats why # worked and / didn't, i only checked var1 format (my mistake)

Sorry for not posting in the dummy forum

Thanks a lot already

PS: it'd always be my mistake, how can the shell make mistakes Smilie
# 7  
Old 06-12-2008
In this case, using
Code:
s#$var1#$var2#

should work as well as
Code:
s#${var1}#${var2}#

. Not sure why yours failed, I guess we'd need to see some more specific examples of your code and variable contents.

BTW, generally using
Code:
${var}

is safer than
Code:
$var

. Likely you already know this, but ${var} lesses any confustion that may be caused if you're trying to build a string from, say, $var_suffix. In that case, is the name of the variable "var" or "var_suffix"? To the shell, it's "var_suffix". You would have to use the braces to specify the variable "var"- ie, ${var}_suffix.
-mschwager
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to use the variable in sed?

version=git release=r8 echo lp-testsuite-git-r8.x86_64.rpm |sed -e "s/-$version-$release.*//g" I want to get lp-testsuite what's wrong with me ? (1 Reply)
Discussion started by: yanglei_fage
1 Replies

2. Red Hat

How to pass value of pwd as variable in SED to replace variable in a script file

Hi all, Hereby wish to have your advise for below: Main concept is I intend to get current directory of my script file. This script file will be copied to /etc/init.d. A string in this copy will be replaced with current directory value. Below is original script file: ... (6 Replies)
Discussion started by: cielle
6 Replies

3. Shell Programming and Scripting

sed and variable

Hello i would like to interpret a variable in this command cnt=3 sed -n '${cnt}p' file.txt sed: 0602-403 `${cnt}`p is not a recognized function. can you help me please ? thanks (2 Replies)
Discussion started by: ade05fr
2 Replies

4. Shell Programming and Scripting

sed with variable

Hi Friends in sed whether we can use variable.like the following expression. sed -i 's/ABC/$var/g' filename I am using Kernel 2.6.18-194.11.1.el5 RedHat linux. I have tried sed -i 's/ABC/"$var"/g' filename, still not working.:( Please help. Thanks in advance Joy (2 Replies)
Discussion started by: itsjoy2u
2 Replies

5. Shell Programming and Scripting

Expand an environment variable in sed, when the variable contains a slash

I'm trying to make a sed substitution where the substitution pattern is an environment variable to be expanded, but the variable contains a "slash". sed -e 's/<HOME_DIRECTORY>/'$HOME'/'This gives me the following error: sed: -e expression #1, char 21: unknown option to `s'Obviously this is... (2 Replies)
Discussion started by: Ilja
2 Replies

6. Shell Programming and Scripting

Insert a line including Variable & Carriage Return / sed command as Variable

I want to instert Category:XXXXX into the 2. line something like this should work, but I have somewhere the wrong sytanx. something with the linebreak goes wrong: sed "2i\\${n}Category:$cat\n" Sample: Titel Blahh Blahh abllk sdhsd sjdhf Blahh Blah Blahh Blahh Should look like... (2 Replies)
Discussion started by: lowmaster
2 Replies

7. Shell Programming and Scripting

using variable in sed

i need to use a value in the Variable to print a particular line from a file using sed command. i tried the below one but its is not working sed -n ' "$var"p ' abc.txt but its is not working please help me to sort out this. (3 Replies)
Discussion started by: Kochu77
3 Replies

8. Shell Programming and Scripting

Sed variable substitution when variable constructed of a directory path

Hello, i have another sed question.. I'm trying to do variable substition with sed and i'm running into a problem. my var1 is a string constructed like this: filename1 filerev1 filepath1 my var2 is another string constructed like this: filename2 filerev2 filepath2 when i do... (2 Replies)
Discussion started by: alrinno
2 Replies

9. Shell Programming and Scripting

sed (variable)

HOw can I use any variable in sed command. For example I am using 'sed -e 's/?/$ORACLE_HOME/g' $file_name Here it replaces ? with $ORACLE_HOME. Instead of it I need actual value of $ORACLE_HOME. How can I do that? Please advice. Thanks in advance. Malay (13 Replies)
Discussion started by: malaymaru
13 Replies

10. UNIX for Dummies Questions & Answers

Doing a sed on a variable help !

Hi, So what I'm trying to do is I have these variables and if they have a dot in them , I want everyting before and including the dot removed. Any ideas ? Something like this I would want : $var = $var | sed 's/.*\.//' but that does't work. I want to save that removal $var... (2 Replies)
Discussion started by: seaten
2 Replies
Login or Register to Ask a Question