Come usare le variabili in un comando in sed?

Ho abc.sh :

 exec $ROOT/Subsystem/xyz.sh 

Su una casella Unix, se stampo echo $HOME ottengo /HOME/COM/FILE .

Voglio sostituire $ROOT con $HOME usando sed.

Uscita prevista:

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

Ho provato, ma non sto ottenendo l’output atteso:

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

aggiunta:

Se ho abc.sh

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

quindi con

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

sta solo sostituendo il primo $ROOT , cioè, l’output sta arrivando come

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

Dire:

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

Nota:

  • Usa le virgolette doppie in modo che sed possa espandere le variabili.
  • Utilizzare un separatore diverso da / poiché la sostituzione contiene /
  • Sfuggi al $ nello schema poiché non vuoi fuggire.

EDIT: per sostituire tutte le occorrenze di $ROOT , ad esempio

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

Questo potrebbe funzionare per te:

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