Come sostituire una stringa con una stringa contenente una barra con sed?


13

Sto cercando un modo per sostituire una stringa in un file con una stringa che contiene una barra usando sed.

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

Il risultato è:

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

Risposte:


31

Usa un altro carattere come delimitatore nel scomando:

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

O sfuggire alle barre con delle ksh93 ${var//pattern/replacement}operatore espansione di parametro (ora supportata anche da zsh, bash, mksh, yashe le versioni recenti di busybox sh).

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

+1 per la seconda strada. il primo non funziona su freebsd.
ibrahim,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.