#1 Le 01/04/2013, à 15:41
- Archonic
[Résolu] Expressions régulières : "\\."
Bonjour,
Je lis actuellement un chapitre traitant des expressions régulières où on nous annonce que le masque de recherche (dans le shell, donc) "a*.txt" correspond à l'expression régulière (avec grep, donc) : "^a.*\\.txt"
^ --> "La ligne commence par ..."
a --> La lettre "a"
. --> N'importe quel caractère
Ok, ça, je comprends
Là où je m'interroge, c'est pour la répétition du "." à l'aide de "*". Je vous livre ci-dessous ce que je comprends (et la démarche logique), j'attends que vous puissiez me le confirmer ou l'infirmer.
L'idée est de faire correspondre l'expression à ".txt" exactement. Cette fois, le "." doit correspondre au caractère, et non pas à l'expression "n'importe quel caractère". On doit donc mettre un "\" devant.
Si on le mettait tel quel (à savoir "\."), cette expression reviendrait à rechercher le caractère "\" suivi de n'importe quel autre (".").
On double donc le "\" pour signaler qu'il s'agit d'un caractère spécial.
Exact? ou je suis tombé dans le piège à mammouth?
Merci beaucoup
Dernière modification par Archonic (Le 02/04/2013, à 18:23)
Hors ligne
#2 Le 01/04/2013, à 15:59
- jamesbad000
Re : [Résolu] Expressions régulières : "\\."
Hello,
dans ce cas, il y a un double échappement.
D'abord la séquence \\. indique au shell d'interpréter l'antislash comme un caractère standard.
Et donc de passer \. à grep sans chercher à lui donner une signification spéciale.
Ensuite le \ restant est bien interprété par grep comme un caractère d'échappement empêchant l'interprétation particulière du point comme caractère générique.
Dernière modification par jamesbad000 (Le 01/04/2013, à 16:09)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#3 Le 01/04/2013, à 18:04
- Archonic
Re : [Résolu] Expressions régulières : "\\."
Bonjour,
Et merci pour le coup de main.
Je vais reformuler pour être certain d'avoir bien compris le principe.
Pour rechercher le caractère ".", il faut l'échapper : Donc "\."
Mais parce que la commande "grep <expression avec \.> <fichier>" est d'abord interprêtée par le shell, et que "\" est un caractère spécial pour lui, il est nécessaire de l'échapper également : \\.
En introduisant "grep --color ^a.*\\.txt <fichier>", le shell va lire l'ensemble et interprêter "^a.*\\.txt" comme étant "^a.*\.txt" qu'il va alors passer à grep.
Hors ligne
#4 Le 01/04/2013, à 18:19
- pingouinux
Re : [Résolu] Expressions régulières : "\\."
Bonjour,
Ceci est correct aussi :
grep "^a.*\.txt" fichier
Hors ligne
#5 Le 01/04/2013, à 18:19
- jamesbad000
Re : [Résolu] Expressions régulières : "\\."
Exact. Tu peux aussi neutraliser l'interprétation de l'antislash par le shell en utilisant des délimiteurs pour encadrer ton expression régulière (' ou ")
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#6 Le 02/04/2013, à 18:23
- Archonic
Re : [Résolu] Expressions régulières : "\\."
Merci à vous
Hors ligne