Подтвердить что ты не робот

Совпадение с образцом не работает в egrep?

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

"1234567-1234567890"

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

\d{7}-\d{10}

с egrep из оболочки следующим образом:

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

?

4b9b3361

Ответ 1

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

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

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

См. также

Ссылки

Ответ 2

Для полноты:

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

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

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

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

Ответ 3

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

grep -P "\d{9}"

Ответ 4

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

Ответ 5

попробуйте следующее:

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