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'

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

+1 pour la deuxième voie. le premier ne fonctionne pas sur freebsd.
ibrahim

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.