为什么在grep列表时需要使用'-P'?

时间:2012-09-01 19:19:06

标签: unix grep

我使用-P选项来查找电话号码列表。使用此选项我的结果非常好,但没有它就不会返回列表。 grep man page表示使用-P将'将PATTERN解释为Perl正则表达式'。因为我不知道Perl,我只是学习grep和regex,这对我来说没什么意义。

有一个简单的解释吗?

2 个答案:

答案 0 :(得分:1)

grep可以使用3组正则表达式:

  • BRE - 基本正则表达式
  • ERE - 扩展正则表达式
  • PCRE - Perl - 兼容正则表达式

所有这些概念之间的一些概念是相同的。例如,[a-z][^0-9]等字符类在所有字符类中都是相同的。另一方面,(\(的含义,或|+|具有特殊意义,取决于常规类别表达式。

这是一个很大的话题;太大了,无法轻易覆盖SO答案。要了解更多信息,请查看Jeff Freidl的Mastering Regular Expressions书籍,以及正则表达式差异集的文档。

答案 1 :(得分:0)

如果没有-P选项grep将模式解释为基本正则表达式,则它们之间存在很大差异,例如使用.?等元字符或|。你必须调整你的正则表达式。