为什么这种模式在egrep中不起作用?

为什么我不能匹配string

"1234567-1234567890" 

与给定的正则expression式

 \d{7}-\d{10} 

与壳egrep像这样:

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

egrep不识别数字字符类的简写,所以你需要使用eg [0-9]

而且,虽然在这种情况下并不是绝对必要的,但引用正则expression式以避免shell的误解是个好习惯。 因此,这样的事情应该工作:

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

也可以看看

  • egrep迷你教程

参考

  • regular-expressions.info/Flavor比较
    • GNU grepedsedegrepawkemacs注释
      • 列出grep vs egrep与其他正则expression式之间的区别

为了完整性:

Egrep其实是支持angular色类的。 这些课程是:

  • [:alnum:]
  • [:α:]
  • [:CNTRL:]
  • [:数字:]
  • [:graphics:]
  • [:降低:]
  • [:打印:]
  • [:PUNCT:]
  • [:空间:]
  • [:上:]
  • [:xdigit:]

示例(注意双括号):

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

使用[0-9]而不是\ d。 egrep不知道\ d。

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

grep -P "\d{9}"

试试这个:

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