Почему этот шаблон не работает в egrep?

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

"1234567-1234567890"

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

\d{7}-\d{10}

с egrep из скорлупы вот так:

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

?

5 ответов

Решение

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

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

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

Смотрите также

Рекомендации

Для полноты:

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

  • [Цифра, буква]
  • [:альфа:]
  • [: CNTRL:]
  • [: Цифры:]
  • [: График:]
  • [: Нижняя:]
  • [:Распечатать:]
  • [Пунктуатор]
  • [:пространство:]
  • [: Верхняя:]
  • [: Xdigit:]

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

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file

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

grep -P "\d{9}"

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

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

egrep '(\d{7}-\d{10})' file
Другие вопросы по тегам