Usando modificadores de Regex compatível com Perl (PCRE) no grep

7

De acordo com grep --help e man grep , podemos usar a opção -P para interpretar o padrão como uma expressão regular Perl (PCRE, para ser preciso), em vez do padrão expressões regulares básicas POSIX (BRE).

Na linguagem Perl, vários Modificadores podem ser adicionados à expressão, em para ajustar a interpretação do padrão (na sintaxe de /pattern/modifiers ).

Então, como alguém pode adicionar modificadores à expressão regular Perl do grep? Eu tentei algumas variações como grep -P "/^got.it$/ms" [FILE] , mas os resultados da pesquisa estavam errados.

No entanto, sobre a interpretação PCRE, o manual aponta que:

This is highly experimental and grep -P may warn of unimplemented features.

É possível que a ferramenta grep não suporte modificadores ?

A propósito, notei que é possível realizar uma correspondência de padrões sem distinção entre maiúsculas e minúsculas usando a opção -i , que é um exemplo de um modificador.

    
por Reflection 25.01.2014 / 15:04

1 resposta

8

As PCREs não são literalmente perl; eles usam uma biblioteca C independente, libpcre. Às vezes, "estilo PCRE" também é usado para se referir, por exemplo, a outras linguagens que implementam regexps usando os mesmos padrões / semelhantes, mesmo que eles não dependam da libpcre (note grep faz usar o real libpcre).

Estritamente falando, uma expressão regular realmente não inclui modificadores, 1 é apenas um padrão. Algumas interfaces de regexp (como as de perl) permitem o uso de modificadores junto com os padrões; grep não.

Existem algumas diferenças em termos de semântica de padrões também. Novamente, lembre-se de que não é realmente perl, é algo baseado nele.

1. A menos que eles estejam realmente dentro do padrão , o que você pode fazer com grep . Por exemplo. grep -P "(?i)foobar" será uma correspondência insensível a maiúsculas e minúsculas.

    
por 25.01.2014 / 15:22