模式匹配数字在egrep中不起作用?

时间:2010-07-06 10:36:52

标签: regex grep character-class

为什么我不能匹配字符串

"1234567-1234567890"

使用给定的正则表达式

\d{7}-\d{10}

来自shell的egrep,如下所示:

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

5 个答案:

答案 0 :(得分:64)

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

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

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

另见

参考

答案 1 :(得分:22)

为了完整性:

事实上,Egrep确实支持角色类。课程是:

  • [:alnum:]
  • [:阿尔法:]
  • [:CNTRL:]
  • [:位:
  • [:图表:]
  • [:低:]
  • [:打印:]
  • [:PUNCT:]
  • [:空间:]
  • [:上:]
  • [:xdigit:]

示例(注意双括号):

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

答案 2 :(得分:16)

如果你通过grep" perl regex"你可以使用\d选项,例如:

grep -P "\d{9}"

答案 3 :(得分:11)

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

答案 4 :(得分:-3)

试试这个:

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