Почему этот шаблон не работает в 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
мини учебник
Рекомендации
Для полноты:
Egrep действительно поддерживает классы персонажей. Классы:
- [Цифра, буква]
- [:альфа:]
- [: CNTRL:]
- [: Цифры:]
- [: График:]
- [: Нижняя:]
- [:Распечатать:]
- [Пунктуатор]
- [:пространство:]
- [: Верхняя:]
- [: Xdigit:]
Пример (обратите внимание на двойные скобки):
egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
Ты можешь использовать \d
если вы передаете grep опцию "perl regex", например:
grep -P "\d{9}"