Comment remplacer une chaîne par une chaîne contenant une barre oblique avec sed?

13

Je cherche un moyen de remplacer une chaîne dans un fichier par une chaîne qui contient une barre oblique en utilisant sed.

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

Le résultat est:

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

Réponses:

31

Utilisez un autre caractère comme délimiteur dans la scommande:

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

Ou échapper aux barres obliques avec de ksh93 ${var//pattern/replacement}opérateur d'extension des paramètres (désormais pris en charge par zsh, bash, mksh, yashet les versions récentes de busybox sh).

printf '%s\n' "$srcText" | sed "s/XPLACEHOLDERX/${connect//\//\\/}/"
homme au travail
la source
+1 pour la deuxième voie. le premier ne fonctionne pas sur freebsd.
ibrahim
2

Si votre shell le prend en charge:

"${srcText/XPLACEHOLDERX/$connect}"
Derek Schrock
la source