Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile

Hors ligne