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
Dire:
sed "s|\$ROOT|${HOME}|" abc.sh
Remarque:
sed
développe les variables./
_ puisque le remplacement contient /
$
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
Cela pourrait fonctionner pour vous:
sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1