Using variable in sed

 
Thread Tools Search this Thread
Operating Systems OS X (Apple) Using variable in sed
# 1  
Old 02-20-2013
Using variable in sed

Hi all,

Somescript.sh looks like this:
Code:
#!/bin/sh
#  somecript.sh

somecommand1

somecommand2

#End

exit

Now I want to add somecommand3 to somescript.sh above #End

I now how to do this:
Code:
sed -ie '/#End/i\
somecommand3\
' /location/of/somescript.sh

This works fine. But now I want to add a variable the same way. I can't get this to work. I thought something like this:
Code:
command=somecommand3

sed -ie '/#End/i\
"$command"\
' /location/of/somescript.sh

But this just adds "$command".

Thanks
# 2  
Old 02-20-2013
The shell sees a multi-line 'string' where $command is not seen and substituted.
Code:
sed -ie '/#End/i\
"$command"\
' /location/of/somescript.sh

The trick is to have 'string1' $command 'string2', so the $command is seen and substituted by the shell.
Code:
sed -ie '/#End/i\
'$command'\
' /location/of/somescript.sh

or
Code:
sed -ie '/#End/i\
'"$command"'\
' /location/of/somescript.sh

The latter uses the fact that the shell sees and substitutes $command within a "string".
# 3  
Old 02-20-2013
Quote:
Originally Posted by MadeInGermany
Code:
sed -ie '/#End/i\
'$command'\
' /location/of/somescript.sh

Not recommended. If command contains a multi-word string, the sed command line will break.
# 4  
Old 02-21-2013
Quote:
Originally Posted by mattiasvdm
I thought something like this:
Code:
command=somecommand3

sed -ie '/#End/i\
"$command"\
' /location/of/somescript.sh

But this just adds "$command".
The reason is that inside a single-quoted string double-quoting has no effect. From the POV of the shell, though, you are inside a single-quoted string. This should work:

Code:
sed -ie '/#End/i\
'"$command"'\
' /location/of/somescript.sh

Note that the single-quoted string ends, then a double-quoted string starts and when this ends another single-quoted string starts. This may look cumbersome, but it is the only way to ensure the sed-command will not break if "$command" contains whitespace.

I hope this helps.

bakunin
# 5  
Old 02-21-2013
Thanks guys,

I get the point. Smilie

Next challenge:

The variable is a multi-line variable:
Code:
read -d '' command <<EOF
command3a
command3b
command3c
EOF

Now if I run:
Code:
sed -ie '/#End/i\
'"$command"'\
' /location/of/somescript.sh

I get:
Code:
sed: 3: "/#End/i\
command3a
command3b ...": invalid command code c

# 6  
Old 02-21-2013
What shell do you use?
Try:
Code:
sed -ie '/#End/i\
'"${command//$'\n'/\\$'\n'}"'\
' /location/of/somescript.sh

# 7  
Old 02-21-2013
bash

And it works! Can you please explain how it works because you lost me at the \\//\\ signs... Smilie
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 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

4. 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

5. 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

6. 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

7. 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

8. Shell Programming and Scripting

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... (6 Replies)
Discussion started by: ngagemaniac
6 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