在 grep 中使用 Perl 兼容正则表达式 (PCRE) 的修饰符

Ref*_*ion 8 grep perl regular-expression

根据grep --helpman grep,我们可以使用该-P选项将模式解释为 Perl 正则表达式(准确地说是 PCRE),而不是默认的POSIX 基本正则表达式(BRE)。

在 Perl 语言中,可以在表达式中添加各种修饰符,以调整模式解释(在 的语法中/pattern/modifiers)。

那么,如何为 grep 的 Perl 正则表达式添加修饰符呢?我尝试了一些变体,grep -P "/^got.it$/ms" [FILE]但搜索结果是错误的。

但是,关于PCRE的解释,手册指出:

这是高度实验性的,grep -P可能会警告未实现的功能。

grep 工具是否可能根本不支持修饰符

顺便说一句,我注意到可以通过使用-i选项来执行不区分大小写的模式匹配,这是一个修饰符的例子。

gol*_*cks 8

PCRE 并不是字面上的 perl;他们使用独立的 C 库 libpcre。有时,“PCRE 风格”也用于指代,例如,使用相同/相似模式实现正则表达式的其他语言,即使它们不依赖于 libpcre(注意grep 确实使用了实际的 libpcre)。

严格来说,正则表达式并不真正包含修饰符,1它只是一种模式。一些正则表达式接口(例如 perl 的)允许使用修饰符和模式;grep没有。

在模式语义方面也存在一些差异。再次记住,它实际上并不是 perl,而是基于它的东西。


1. 除非它们实际上在模式内,您可以使用grep. 例如grep -P "(?i)foobar"将是不区分大小写的匹配。