2014-07-27 7 views
4

Je suis sur OSX 10.9.4 essayant de convertir cette python regex p = "(2024 (?:(?:(?:[a-z|.]+ ?)+)) 93)" en Unge regex pour améliorer la vitesse de grep. Pour tester (et démarrer), je cours grep --color -e "[:alpha:]" /Volumes/USB/Corpus/MaskedContracts_Pre_N/01-01-09-Maximus-Inc-Second-Amendment.txt pour essayer et trouver alpha caractères dans le fichier. Je pense que cela permettrait de sélectionner tous les caractères alpha, mais il n'en choisit que quelques-uns. Ai-je manqué quelque chose dans les docs (liés)? Que se passe-t-il?alpha regex ne sélectionne pas les caractères alpha dans bash

enter image description here

Répondre

3

Je ne suis pas sur OSX, mais ma version de grep (version 2.12 sous Linux) retourne en fait un message qui est assez descriptif lorsque vous essayez d'utiliser -e '[:alpha:]':

grep: syntaxe de classe de caractères est [[: space:]], pas [: space:]

en d'autres termes, la syntaxe est d'utiliser [:alpha:]intérieur une expression de parenthèse, ce qui signifie que la syntaxe finale aura des parenthèses imbriquées: [[:alpha:]].

Ce qui est logique, quand on y pense, comme il n'y aurait aucun moyen pour un moteur regex désambiguïser [:alpha:] entre la classe de caractères, et seulement les personnages :, a, l, p, and h

2

Dans votre regex:

[:alpha:] 

est une classe de caractères recherchant un de a, l, p, h,:, donc il y a les caractères en surbrillance que vous voyez. Qu'est-ce que vous voulez vraiment est:

grep -e '[[:alpha:]]' 

Aussi, si vous souhaitez que les caractères que vous correspondez à la sortie essayer le drapeau -o:

grep -oe '[[:alpha:]]' 
Questions connexes