web-dev-qa-db-fra.com

Les chiffres de correspondance de modèle ne fonctionnent pas dans egrep?

Pourquoi ne puis-je pas faire correspondre la chaîne

"1234567-1234567890"

avec l'expression régulière donnée

\d{7}-\d{10}

avec egrep du Shell comme ceci:

egrep \d{7}-\d{10} file

?

55
user377622

egrep ne reconnaît pas \d raccourci pour la classe de caractères numériques, vous devez donc utiliser par exemple [0-9].

De plus, bien que ce ne soit pas absolument nécessaire dans ce cas, il est de bonne habitude de citer l'expression régulière pour éviter une mauvaise interprétation par le shell. Ainsi, quelque chose comme ça devrait fonctionner:

egrep '[0-9]{7}-[0-9]{10}' file

Voir également

Les références

68
polygenelubricants

Pour être complet:

Egrep prend en fait en charge les classes de personnages. Les cours sont:

  • [: alnum:]
  • [:alpha:]
  • [: cntrl:]
  • [:chiffre:]
  • [:graphique:]
  • [:inférieur:]
  • [:impression:]
  • [: ponct:]
  • [:espace:]
  • [:plus haut:]
  • [: xdigit:]

Exemple (notez les doubles crochets):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
23
André Laszlo

vous pouvez utiliser \d si vous passez grep l'option "Perl regex", ex:

grep -P "\d{9}"

16
rogerdpack

Utilisez [0-9] au lieu de\d. egrep ne sait pas\d.

11
sepp2k