web-dev-qa-db-fra.com

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

Je veux pouvoir utiliser sed pour prendre une entrée telle que:

C:\Windows\Folder\File.txt

à

C:/Windows/Folder/File.txt
41
Emily

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
57
Emiliano Poggi

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

tr '\\' '/'
59
glenn jackman

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'
23
Mehrdad
$ 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.

9
Jimmy

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.

7
Toby Speight

Cela pourrait fonctionner pour vous:

sed 'y/\\/\//'
2
potong

Pour moi, cela remplace une barre oblique inverse par une barre oblique.

sed -e "s/\\\\/\//"  file.txt
1
toddcscar

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.

1