# rm-rf.es

¿Cómo escapar caracteres dentro de una variable en sed?

Hace un tiempo os expliqué la forma de utilizar variables dentro de sed, ¿pero como hacemos si dentro del contenido de la variable hay caracteres que tienen que ser «escapados»? Por ejemplo:

#!/bin/bash
VARIABLE="/foo/bar/test"
sed "s/${VARIABLE}/foo/" fichero

Si lo ejecutamos:

sed: -e expression #1, char 8: unknown option to `s'

Lo que pasa es que como la variable tiene el carácter «/», deberíamos escaparlo «\/» para que no interfiriera en la sintaxis de sed. Para no complicarnos la vida, hay una forma más sencilla. Sed permite elegir el delimitador de los parámetros del comando, no tiene que ser «/» sino que puede ser otro (,=…). Para evitar el problema entonces podemos cambiar la ejecución de sed tal que así:

#!/bin/bash
VARIABLE="/foo/bar/test"
sed "s,${VARIABLE},foo," fichero

He elegido la «,» como delimitador de los parámetros, pero podríamos elegir otro, por ejemplo «#». La idea es utilizar un carácter que no esté dentro de la variable y que no interfiera con los caracteres especiales del comando:

sed "s#${VARIABLE}#foo#" fichero
Salir de la versión móvil