Comment reconnaitre le caratère backslash

Résolu/Fermé
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 - 19 nov. 2015 à 16:16
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 20 nov. 2015 à 08:12
Bonjour, dans un fichier, je veux remplacer une chaine de caractères par une autre. dans un shell bash.

La commande
sed -i -e "s/chaine\_a\_remplacer/nouvelle\_chaine/g" fichier

fonctionne très bien, à partir du moment où on place un backslash devant les caractères spéciaux contenus dans la chaine à remplacer ainsi que dans la chaine de remplacement.

Par contre je n'arrive pas à écrire un shell qui me permettrait de remplacer le caractère \
Exemple: je veux remplacer la chaine suivante:

\"TOTO"\ par rien du tout !!!! je ne suis pas arrivé à faire ça dans un shell, est-ce que quelqu'un aurait une idée ?

Merci pour vos réponses.

6 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
19 nov. 2015 à 16:29
hello
$ cat fichier
\"TOTO"\
$ sed 's/\\"TOTO"\\/rien du tout/g' fichier
rien du tout
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 65
19 nov. 2015 à 17:20
Bonjour et merci pour ta réponse dubcek, d'abord je fais une petite rectification sur la chaine de caractères que je veux remplacer par rien (c'est à dire en fait supprimer cette chaine), ce n'est pas comme j'ai dit dans mon premier message la chaine \"TOTO"\ mais la chaine \"TOTO\"

De plus je précise bien que je veux faire ça dans un shell pas directement dans une console, j'ai essayé de mettre des backslash devant les backslash déjà existants mais ça ne marche pas.

Voici ce que j'ai fait dans mon shell:

sed -i -e 's/\\"TOTO\\"/g' fichier

A l'exécution il me met le message:
sed: -e expression n°1, caractère 19: commande `s' inachevée

Voilà, merci pour votre aide.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
20 nov. 2015 à 08:12
il manqe un /
sed -i -e 's/\\"TOTO\\"//g' fichier
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
19 nov. 2015 à 17:35
Salut,

$ var='la chaine \"TOTO"\ mais la chaine \"TOTO\"'

$ echo "${var}"
la chaine \"TOTO"\ mais la chaine \"TOTO\"

$ echo "${var}" | sed 's/\\"[^\]*\\"//'
la chaine \"TOTO"\ mais la chaine

0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 65
19 nov. 2015 à 18:06
Bonsoir, merci pour ta réponse zipe31 mais mon problème n'est pas de faire un echo dans une console, mon problème est de remplacer dans un fichier nommé fichier la chaine de caractères \"TOTO\" par rien du tout. Supposons que dans mon fichier j'ai ceci:

azertyuiop\"TOTO\"qsdfghjklm


à la sortie dans mon nouveau fichier je veux avoir ceci:
azertyuiopqsdfghjklm

Je précise que je ne veux pas faire ça dans une console mais dans un shell programmé dans un .sh

Merci pour vos réponses.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
19 nov. 2015 à 18:09
$ cat plop 
azertyuiop\"TOTO\"qsdfghjklm

$ sed 's/\\"[^\]*\\"//' plop
azertyuiopqsdfghjklm
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 65
19 nov. 2015 à 18:43
Re-bonsoir, zipe31 ce que tu me dis fonctionne si je passe la commande dans une console mais ça ne marche pas dans un programme shell écrit dans un fichier de commandes .sh

De plus si dans mon fichier j'ai par exemple \"TITI"\ et plus loin \"TOTO\" il va me supprimer \"TITI"\ parce que c'est le premier qu'il trouve. Mais moi ce que je veux c'est que dans mon fichier quand il rencontre la chaine \"TOTO\" je veux qu'il la supprime et qu'il ne supprime pas \"TITI"\

J'nsiste sur le fait qu'il ne s'agit pas pour moi de faire des echo sur une console mais dans un fichier donné supprimer la chaine de caractères \"TOTO\" par lancement d'un fichier de commandes shell.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
19 nov. 2015 à 18:50
Le contenu du fichier plop :
$ cat plop 
azertyuiop\"TOTO\"qsdfghjklm

De plus si dans mon fichier j'ai par exemple \"TITI"\ et plus loin \"TOTO\"
il va me supprimer \"TITI"\ parce que c'est le premier qu'il trouve.
Mais moi ce que je veux c'est que dans mon fichier quand il rencontre
la chaine \"TOTO\" je veux qu'il la supprime et qu'il ne supprime pas \"TITI"\


Le résultat de la commande sed sur le fichier plop dans un terminal :
$ sed 's/\\"TOTO\\"//' plop 
azertyuiopqsdfghjklm

De plus si dans mon fichier j'ai par exemple \"TITI"\ et plus loin
il va me supprimer \"TITI"\ parce que c'est le premier qu'il trouve.
Mais moi ce que je veux c'est que dans mon fichier quand il rencontre
la chaine je veux qu'il la supprime et qu'il ne supprime pas \"TITI"\


On crée un script bash :
$ cat foo.sh 
#!/bin/bash

sed -i.bak 's/\\"TOTO\\"//' $1

cat $1


On exécute le script :
$ ./foo.sh plop 
azertyuiopqsdfghjklm

De plus si dans mon fichier j'ai par exemple \"TITI"\ et plus loin
il va me supprimer \"TITI"\ parce que c'est le premier qu'il trouve.
Mais moi ce que je veux c'est que dans mon fichier quand il rencontre
la chaine je veux qu'il la supprime et qu'il ne supprime pas \"TITI"\


Le contenu du fichier plop après l'exécution du script :
$ cat plop
azertyuiopqsdfghjklm

De plus si dans mon fichier j'ai par exemple \"TITI"\ et plus loin
il va me supprimer \"TITI"\ parce que c'est le premier qu'il trouve.
Mais moi ce que je veux c'est que dans mon fichier quand il rencontre
la chaine je veux qu'il la supprime et qu'il ne supprime pas \"TITI"\


What else ? ;-))
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 65
19 nov. 2015 à 19:13
OK !! OK !! OK !! merci beaucoup nothing else ça marche mille excuses j'avais pas bien copié la commande. Encore merci.
0