views:

655

answers:

3

I have a problem replacing a command inside of a script, the offending line in the script looks like this:

mail -s "$(hostname) on $(date)"

It should be replaced with a line like this:

nail -r "[email protected]" -s "Subject" -S smtp=255.255.255.255

But I can't get sed to do a replacement :) I wrote a small script for that purpose:

#!/bin/bash

old="mail -s \"\$(hostname) on \$(date)"
new="nail -r \"[email protected]\" -s \"Subject\" -S smtp=255.255.255.255"

sed -i 's|$old|$new|' script.sh

Does anyone have any advice?

+1  A: 

Sed by default does not do in Place editing. If you are using gnu Sed try providing the in place flag -ikbak

ennuikiller
The OP has the `-i` option in place. The only difference is that yours causes a backup to be created with the (unusual?) suffix "kbak".
Dennis Williamson
yes just was wondering if he's using gnu sed
ennuikiller
+3  A: 
sed -i "s|$old|$new|" script.sh

Note the double quotes.

Michael Krelin - hacker
Thank you for pointing out this stupid mistake :) I've been using sed to replace and append double quotes where needed and got tired of escaping them all the time so i just started to put in single quotes and forgot about it :)
f10bit
A: 

Better use ed!

http://bash-hackers.org/wiki/doku.php?id=howto%3Aedit-ed