70

为什么我不能匹配字符串

"1234567-1234567890"

使用给定的正则表达式

\d{7}-\d{10}

egrep这样的外壳:

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

?

4

5 回答 5

88

egrep不识别\d数字字符类的简写,因此您需要使用 eg [0-9]

此外,虽然在这种情况下不是绝对必要的,但引用正则表达式以防止 shell 误解是一个好习惯。因此,这样的事情应该有效:

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

也可以看看

参考

于 2010-07-06T10:42:31.013 回答
27

为了完整性:

Egrep 实际上确实支持字符类。这些课程是:

  • [:铝:]
  • [:α:]
  • [:cntrl:]
  • [:数字:]
  • [:图形:]
  • [:降低:]
  • [:打印:]
  • [:点点:]
  • [:空间:]
  • [:上:]
  • [:x数字:]

示例(注意双括号):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
于 2013-01-22T16:47:31.257 回答
21

\d如果您通过 grep “perl 正则表达式”选项,您可以使用,例如:

grep -P "\d{9}"

于 2015-10-16T19:09:41.020 回答
11

使用 [0-9] 代替 \d。egrep 不知道\d。

于 2010-07-06T10:44:26.553 回答
-3

试试这个:

egrep '(\d{7}-\d{10})' file
于 2010-07-06T10:45:53.993 回答