Issue
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
Solution
Say:
sed "s|\$ROOT|${HOME}|" abc.sh
Note:
- Use double quotes so that the shell would expand variables.
- Use a separator different than
/
since the replacement contains/
- Escape the
$
in the pattern since you don't want to expand it.
EDIT: In order to replace all occurrences of $ROOT
, say
sed "s|\$ROOT|${HOME}|g" abc.sh
Answered By - devnull