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'

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

+1 para segunda via. o primeiro não funciona no freebsd.
ibrahim

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.