web-dev-qa-db-fra.com

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, Alors j'obtiens /HOME/COM/FILE.

Je veux remplacer $ROOT Par $HOME En utilisant sed.

Production attendue:

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

J'ai essayé, mais je ne reçois 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

puis avec

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

il remplace seulement le premier $ROOT, c’est-à-dire que la sortie arrive comme

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

Dire:

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

Remarque:

  • Utilisez des guillemets doubles pour que sed développe les variables.
  • Utilisez un séparateur différent de / _ puisque le remplacement contient /
  • Escape the $ dans le motif puisque vous ne voulez pas y échapper.

EDIT: afin de remplacer toutes les occurrences de $ROOT, dire

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

Cela pourrait fonctionner pour vous:

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