¿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'

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//\//\\/}/"

+1 para la segunda forma. el primero no funciona en freebsd.
ibrahim

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.