Совпадение с образцом не работает в egrep? - PullRequest
54 голосов
/ 06 июля 2010

Почему я не могу сопоставить строку

"1234567-1234567890"

с заданным регулярным выражением

\d{7}-\d{10}

с egrep из оболочки вроде этого:

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

Ответы [ 5 ]

67 голосов
/ 06 июля 2010

egrep не распознает \d сокращение для класса цифровых символов, поэтому вам нужно использовать, например, [0-9].

Более того, хотя в этом случае это не является абсолютно необходимым, это хорошая привычкапроцитируйте регулярное выражение, чтобы предотвратить неправильное толкование оболочкой.Таким образом, что-то вроде этого должно работать:

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

См. Также

Ссылки

23 голосов
/ 22 января 2013

Для полноты:

Egrep действительно поддерживает классы персонажей. Классы:

  • [цифра, буква]
  • [: альфа-:]
  • [: CNTRL:]
  • [: цифры:]
  • [: график:]
  • [: ниже:]
  • [: печать:]
  • [пунктуатор]
  • [: пространство:]
  • [: верхняя:]
  • [: xdigit:]

Пример (обратите внимание на двойные скобки):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
16 голосов
/ 16 октября 2015

вы можете использовать \d, если передаете grep опцию "perl regex", например:

grep -P "\d{9}"

11 голосов
/ 06 июля 2010

Используйте [0-9] вместо \ d. egrep не знает \ d.

0 голосов
/ 06 июля 2010

попробуйте это:

egrep '(\d{7}-\d{10})' file
...