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

为什么我配不上这根绳子

"1234567-1234567890"

使用给定的正则表达式

\d{7}-\d{10}

egrep从外壳像这样:

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

40362 次浏览

egrep不能识别数字字符类的 \d速记,因此需要使用例如 [0-9]

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

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

参见

参考文献

使用[0-9]代替 d。

试试这个:

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

完整性:

Egrep 实际上支持字符类,这些类是:

  • [校对: alnum ]
  • [ : alpha: ]
  • [ : cntrl: ]
  • [ : 数字: ]
  • [ : 图表: ]
  • [ : low: ]
  • [ : 印刷: ]
  • [ : 点: ]
  • [ : space: ]
  • [ : 上: ]
  • [ : xdigital: ]

示例(注意双括号) :

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

如果传递 grep“ perl regex”选项,则可以使用 \d,例如:

grep -P "\d{9}"