Como substituir uma string por uma string que contém barra com sed?

13

Estou procurando uma maneira de substituir uma string em um arquivo por uma string que contenha uma barra usando sed.

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

O resultado é:

sed: -e Expression #1, Character 32: Unknown option for `s'
Martin
fonte

Respostas:

31

Use outro caractere como delimitador no scomando:

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

Ou escapar as barras com das ksh93 ${var//pattern/replacement}operador de expansão de parâmetros (agora também apoiado por zsh, bash, mksh, yashe versões recentes do busybox sh).

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"
homem a trabalhar
fonte
+1 para segunda via. o primeiro não funciona no freebsd.
ibrahim
2

Se o seu shell suportar:

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