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

Resuelto VJS asked hace 10 años • 4 respuestas

Tengo abc.sh:

exec $ROOT/Subsystem/xyz.sh

En una caja Unix, si imprimo, echo $HOMEobtengo /HOME/COM/FILE.

Quiero reemplazarlo $ROOTcon $HOMEsed.

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
VJS avatar Oct 03 '13 13:10 VJS
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
devnull avatar Oct 03 '2013 06:10 devnull

Esto podría funcionar para usted:

sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1
potong avatar Oct 03 '2013 06:10 potong