Cómo pasar una variable que contiene barras diagonales a sed
¿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 sed
así:
sed "s/$var/replace/g" "$file"
Sin embargo, recibo errores. ¿Cómo puedo evitar el problema?
Aceptado
Utilice un delimitador de expresiones regulares alternativo, ya que sed
le 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 bash
Shell puedes usar esto sed
como \03
delimitador:
d=$'\03'
sed "s${d}$var${d}replace$d" file
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