¿Cómo usar variables en un comando en sed?

Tengo abc.sh :

 exec $ROOT/Subsystem/xyz.sh 

En un cuadro de Unix, si imprimo echo $HOME entonces obtengo /HOME/COM/FILE .

Quiero reemplazar $ROOT con $HOME usando sed.

Rendimiento esperado:

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

Lo intenté, pero no estoy obteniendo el resultado esperado:

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

Adición:

Si tengo abc.sh

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

luego con

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

solo está reemplazando el primer $ROOT , es decir, el resultado viene como

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

Decir:

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

Nota:

  • Usa comillas dobles para que sed expanda las variables.
  • Use un separador diferente de / ya que el reemplazo contiene /
  • Escape $ en el patrón ya que no quiere escapar de él.

EDITAR: Para reemplazar todas las ocurrencias de $ROOT , diga

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

Esto podría funcionar para usted:

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