Comment utiliser des variables dans une commande dans sed?

J’ai abc.sh :

 exec $ROOT/Subsystem/xyz.sh 

Sur une boîte Unix, si j’imprime echo $HOME je reçois /HOME/COM/FILE .

Je veux remplacer $ROOT par $HOME utilisant sed.

Production attendue:

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

J’ai essayé, mais je n’obtiens pas le résultat attendu:

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

Une addition:

Si j’ai abc.sh

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

alors avec

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

il ne fait que remplacer le premier $ROOT , c’est-à-dire que la sortie

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

Dire:

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

Remarque:

  • Utilisez des guillemets doubles pour que sed élargisse les variables.
  • Utilisez un séparateur différent de / puisque le remplacement contient /
  • Échappez le $ dans le motif car vous ne voulez pas y échapper.

EDIT: pour remplacer toutes les occurrences de $ROOT , dites

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

Cela pourrait fonctionner pour vous:

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