Isabelle
Isabelle

Reputation: 631

Sed not working inside bash script

I believe this may be a simple question, but I've looked everywhere and tried some workarounds, but I still haven't solved the problem.

Problem description: I have to replace a character inside a file and I can do it easily using the command line:

sed -e 's/pattern1/pattern2/g' full_path_to_file/file

But when I use the same line inside a bash script I can't seem to be able to replace it, and I don't get an error message, just the file contents without the substitution.

#!/bin/sh

VAR1="patter1"
VAR2="patter2"

VAR3="full_path_to_file"

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3}

Any help would be appreciated.

Thank you very much for your time.

Upvotes: 26

Views: 58860

Answers (2)

I use a script like yours... and mine works as well!

#!/bin/sh

var1='pattern1'
var2='pattern2'

sed -i "s&$var1&$var2&g" *.html

See that, mine use "-i"... and the seperator character "&" I use is different as yours. The separator character "&" can be used any other character that DOES NOT HAVE AT PATTERN.

You can use:

sed -i "s#$var1#$var2#g" *.html

sed -i "s@$var1@$var2@g" *.html

...

If my pattern is: "[email protected]" of course you must use a seperator different like "#", "%"... ok?

Upvotes: 1

Dmitry Yudakov
Dmitry Yudakov

Reputation: 15734

Try

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3}

Bash reference says:

The characters ‘$’ and ‘`’ retain their special meaning within double quotes

Thus it will be able to resolve your variables

Upvotes: 47

Related Questions