62 votes

Utilisez sed pour remplacer toutes les barres obliques inverses par des barres obliques avant.

Je veux être capable d'utiliser sed pour prendre une entrée telle que :

C:\Windows\Folder\File.txt

à

C:/Windows/Folder/File.txt

89voto

empo Points 12803

sed peut effectuer des transformations de texte sur un flux d'entrée provenant d'un fichier ou d'un pipeline. Exemple :

echo 'C:\foo\bar.xml' | sed 's/\\/\//g'

obtient

C:/foo/bar.xml

70voto

glenn jackman Points 69748

Pour simplement traduire un caractère en un autre dans une chaîne de caractères, tr est le meilleur outil :

tr '\\' '/'

29voto

Mehrdad Points 70493

Il suffit d'utiliser :

sed 's.\\./.g'

Il n'y a aucune raison d'utiliser / comme séparateur dans sed . Mais si tu le voulais vraiment :

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

13voto

Toby Speight Points 3930

Si votre texte se trouve dans une variable Bash, la substitution de paramètres est possible. ${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 par une commande telle que tr o sed .

11voto

Jimmy Points 1303
$ 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 "s" initial indique simplement qu'il faut rechercher le texte ancien et le remplacer par le texte nouveau.

Le "g" de fin de ligne indique simplement qu'il faut remplacer toutes les occurrences sur une ligne donnée, et pas seulement la première.

Et bien sûr, vous devez séparer le "s", le "g", l'ancien et le nouveau. C'est là que vous devez utiliser des barres obliques comme séparateurs.

Pour votre cas OLD_TEXT == '\' y NEW_TEXT == '/' . Mais vous ne pouvez pas vous contenter de taper des slashs en vous attendant à ce que les choses soient fonctionnent comme prévu être pris au pied de la lettre tout en les utilisant en même temps comme séparateurs. 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.

Donc pour toi, OLD_TEXT == '\\' y NEW_TEXT == '\/' . En les plaçant à l'intérieur du 's/OLD_TEXT/NEW_TEXT/g' paradigme que vous obtenez
's/\\/\//g' . Cela se lit comme suit
' s / \\ / \/ / g et après les échappatoires, c'est
' s / \ / / / g ' qui remplacera toutes les barres obliques inverses par des barres obliques avant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X