¿Cómo reemplazar una cadena con una cadena que contiene barra oblicua con sed?

13

Estoy buscando una manera de reemplazar una cadena en un archivo con una cadena que contiene una barra diagonal usando sed.

connect="192.168.100.61/foo"
srcText="foo.bar=XPLACEHOLDERX"
echo $srcText | sed "s/XPLACEHOLDERX/$connect"

El resultado es:

sed: -e Expression #1, Character 32: Unknown option for `s'
martín
fuente

Respuestas:

31

Use otro carácter como delimitador en el scomando:

printf '%s\n' "$srcText" | sed "s|XPLACEHOLDERX|$connect|"

O escapar de las barras con ksh93 de ${var//pattern/replacement}operador de expansión de parámetros (ahora también con el apoyo de zsh, bash, mksh, yashy las versiones recientes de busybox sh).

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"
hombre trabajando
fuente
+1 para la segunda forma. el primero no funciona en freebsd.
ibrahim
2

Si su shell lo admite:

"${srcText/XPLACEHOLDERX/$connect}"
Derek Schrock
fuente