Je veux pouvoir utiliser sed pour prendre une entrée telle que:
C:\Windows\Folder\File.txt
à
C:/Windows/Folder/File.txt
sed
peut effectuer des transformations de texte sur le flux d'entrée à partir d'un fichier ou d'un pipeline. Exemple:
echo 'C:\foo\bar.xml' | sed 's/\\/\//g'
obtient
C:/foo/bar.xml
pour simplement traduire un caractère en un autre dans une chaîne, tr
est le meilleur outil:
tr '\\' '/'
Utilisez simplement:
sed 's.\\./.g'
Il n'y a aucune raison d'utiliser /
comme séparateur dans sed
. Mais si vous vouliez vraiment:
sed 's/\\/\//g'
$ echo "C:\Windows\Folder\File.txt" | sed -e 's/\\/\//g'
C:/Windows/Folder/File.txt
La commande sed dans ce cas est 's/OLD_TEXT/NEW_TEXT/g'
.
Le premier signe lui indique simplement de rechercher OLD_TEXT et de le remplacer par NEW_TEXT.
Le "g" de fin indique simplement de remplacer toutes les occurrences sur une ligne donnée, pas seulement la première.
Et bien sûr, vous devez séparer le "s", le "g", l'ancien et le nouveau les uns des autres. C'est là que vous devez utiliser des barres obliques comme séparateurs.
Pour votre cas OLD_TEXT == '\'
et NEW_TEXT == '/'
. Mais vous ne pouvez pas simplement taper des barres obliques et vous attendre à ce que les choses travailler comme prévu être pris à la lettre tout en les utilisant comme séparateurs en même temps. En général, les barres obliques sont assez spéciales et doivent être traitées comme telles. Ils doivent être `` échappés '' (c'est-à-dire précédés) par une barre oblique inverse.
Alors pour vous, OLD_TEXT == '\\'
et NEW_TEXT == '\/'
. Les mettre à l'intérieur du 's/OLD_TEXT/NEW_TEXT/g'
paradigme que vous obtenez's/\\/\//g'
. Cela se lit comme
's
/\\
/\/
/g
'et après les échappements est
's
/\
//
/g
'qui remplacera toutes les barres obliques inverses par des barres obliques.
Si votre texte se trouve dans une variable Bash, la substitution de paramètres ${var//\\//}
peut remplacer les sous-chaînes:
$ p='C:\foo\bar.xml'
$ printf '%s\n' "$p"
C:\foo\bar.xml
$ printf '%s\n' "${p//\\//}"
C:/foo/bar.xml
Cela peut être plus simple et plus clair que le filtrage via une commande telle que tr
ou sed
.
Cela pourrait fonctionner pour vous:
sed 'y/\\/\//'
Pour moi, cela remplace une barre oblique inverse par une barre oblique.
sed -e "s/\\\\/\//" file.txt
Tu peux essayer
sed 's:\\:\/:g'`
La première \
consiste à insérer une entrée, la seconde \
sera celui que vous souhaitez remplacer.
C'est donc ":" Première barre oblique "\" deuxième barre oblique "\" ":" "\" pour insérer l'entrée "/" comme la nouvelle barre oblique qui sera présentée ":" g '
\\ \/
Et c'est tout. Ça va marcher.