Comment reconnaitre le caratère backslash
Résolu
zatox
Messages postés
640
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
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.
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.
A voir également:
- Comment reconnaitre le caratère backslash
- Application pour reconnaître les boutons - Accueil - Outils
- Backslash qwerty - Forum Windows
- Backslash mac ✓ - Forum MacOS
- Faire slash et anti-slash sur clavier qwerty ✓ - Forum Clavier
- Comment reconnaître une fausse conversation whatsapp - Forum iPhone
6 réponses
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.
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.
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
Le contenu du fichier plop :
Le résultat de la commande sed sur le fichier plop dans un terminal :
On crée un script bash :
On exécute le script :
Le contenu du fichier plop après l'exécution du script :
What else ? ;-))
$ 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 ? ;-))