From: Michael Elkins on
On Fri, Apr 16, 2010 at 08:15:38PM -0400, Daniel D Jones wrote:
>What I'm trying to do is pretty simple. Getting it to work is turning out not
>to be. What I want to do is call a bash script with a couple of arguments,
>and, within the script, call sed to use those args to replace two placeholders
>in a file:
>
>bashscript SUB1 SUB2
>
>This line inside bashscript doesn't work:
>
>sed -e 's/PLACEHOLDER1/$1/' -e 's/PLACEHOLDER2/$2/' < input > output

If you switch the single quotes to double quotes it will work as you expect.
Variables inside of double quotes are expanded. Single quotes are for literal
strings, as you've discovered.

me
From: Michael Elkins on
On Sat, Apr 17, 2010 at 12:02:40PM -0400, Daniel D Jones wrote:
>That was the first thing I tried and sed gave me an error:
>
>sed: -e expression #1, char 18: unknown option to `s'
>
>I just went back and tried it again and it worked, so I have no idea what I
>did the first time that made it not work.

You can run into that sort of problem if your pattern to replace contains any
forward slashes (/) in it. If you need to such an expansion, you probably
want to do it in two passes, first doing a / to \/ substitution on your
replacement strings, then inserting them into your final expression:

pata=`echo $1 | sed 's,/,\/,'`
patb=`echo $2 | sed 's,/,\/,'`
sed -e "s/PATTERN1/$pata/" -e "s/PATTERN2/$patb/" < input > output

me