Cómo pasar una variable que contiene barras diagonales a sed

Resuelto buydadip asked hace 9 años • 7 respuestas

¿Cómo se pasa una variable que contiene barras como patrón sed?

Por ejemplo, si tengo la siguiente variable:

var="/Users/Documents/name/file"

Quiero pasarlo sedasí:

sed "s/$var/replace/g" "$file"

Sin embargo, recibo errores. ¿Cómo puedo evitar el problema?

buydadip avatar Jan 06 '15 03:01 buydadip
Aceptado

Utilice un delimitador de expresiones regulares alternativo, ya que sedle permite utilizar cualquier delimitador ( incluidos los caracteres de control ):

sed "s~$var~replace~g" $file

Como se mencionó anteriormente, podemos usar el carácter de control como delimitador, así como:

sed "s^[$var^[replace^[g" file

Donde ^[se escribe presionando Ctrl-V-3juntos.

O bien, en bashShell puedes usar esto sedcomo \03delimitador:

d=$'\03'
sed "s${d}$var${d}replace$d" file
anubhava avatar Jan 05 '2015 20:01 anubhava

Una respuesta puramente bash: use la expansión de parámetros para escapar de cualquier barra inclinada en la variable:

var="/Users/Documents/name/file"
sed "s/${var//\//\\/}/replace/g" $file
glenn jackman avatar Jan 05 '2015 22:01 glenn jackman