web-dev-qa-db-fra.com

Slash et backslash dans sed

Je veux utiliser sed pour changer une barre oblique en barre oblique inverse et une barre oblique, c'est-à-dire / -> \/. Mais ça ne marche pas. Voici un petit exemple:

#!/bin/bash
TEST=/etc/hallo
echo $TEST
echo $TEST | sed "s/hallo/bello/g"
echo $TEST | sed "s/\//\\\//g"

La sortie des trois premières lignes est telle que supposée. Mais le dernier ne fonctionne pas. Pourquoi? Comment corriger la dernière partie?

40
devopsfun

Utilisez des guillemets simples pour l'expression que vous avez utilisée:

sed 's/\//\\\//g'

Entre guillemets, \ a une signification particulière, vous devez donc la contre-obliquer:

sed "s/\//\\\\\//g"

Mais il est plus propre de changer le délimiteur:

sed 's=/=\\/=g'
sed "s=/=\\\/=g"
82
choroba

Essayer:

sed 's/\//\\\//g'

ou en utilisant un autre délimiteur pour vous empêcher d'échapper à la barre oblique:

sed 's,/,\\/,g'
16
cuonglm