¿Cómo usar variables en un comando en sed?
Tengo abc.sh
:
exec $ROOT/Subsystem/xyz.sh
En una caja Unix, si imprimo, echo $HOME
obtengo /HOME/COM/FILE
.
Quiero reemplazarlo $ROOT
con $HOME
sed.
Rendimiento esperado:
exec /HOME/COM/FILE/Subsystem/xyz.sh
Lo intenté, pero no obtengo el resultado esperado:
sed 's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1
Suma:
Si tengoabc.sh
exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
luego con
sed "s|\$INSTALLROOT/|${INSTALLROOT}|" abc.sh
solo está reemplazando primero $ROOT
, es decir, la salida viene como
exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Aceptado
Decir:
sed "s|\$ROOT|${HOME}|" abc.sh
Nota:
- Utilice comillas dobles para que el shell expanda las variables.
- Utilice un separador diferente ya
/
que el reemplazo contiene/
- Escapa del
$
patrón ya que no deseas expandirlo.
EDITAR: Para reemplazar todas las apariciones de $ROOT
, digamos
sed "s|\$ROOT|${HOME}|g" abc.sh
Esto podría funcionar para usted:
sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1