How to use variables in a command in sed?

2018-12-31 23:15发布

问题:

I have abc.sh:

exec $ROOT/Subsystem/xyz.sh

On a Unix box, if I print echo $HOME then I get /HOME/COM/FILE.

I want to replace $ROOT with $HOME using sed.

Expected Output:

exec /HOME/COM/FILE/Subsystem/xyz.sh

I tried, but I\'m not getting the expected output:

sed  \'s/$ROOT/\"${HOME}\"/g\' abc.sh > abc.sh.1

Addition:

If I have abc.sh

exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh

then with

sed \"s|\\$INSTALLROOT/|${INSTALLROOT}|\" abc.sh

it is only replacing first $ROOT, i.e., output is coming as

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh

回答1:

Say:

sed \"s|\\$ROOT|${HOME}|\" abc.sh

Note:

  • Use double quotes so that sed would expand variables.
  • Use a separator different than / since the replacement contains /
  • Escape the $ in the pattern since you don\'t want to escape it.

EDIT: In order to replace all occurrences of $ROOT, say

sed \"s|\\$ROOT|${HOME}|g\" abc.sh


回答2:

This might work for you:

sed \'s|$ROOT|\'\"${HOME}\"\'|g\' abc.sh > abc.sh.1


标签: unix sed