O look-behind negativo é suportado no OSX grep?

6

Estou tentando fazer algo assim:

grep -r '(?<!notthis)butthis' ./*

E não estou obtendo resultados quando alguns devem ser devolvidos. Estou perdendo uma fuga? Ou o OSX simplesmente não suporta a expressão regex?

    
por Mafuba 31.08.2013 / 22:54

1 resposta

13

O padrão OS X grep suporta apenas Expressões regulares básicas e estendidas conforme definido em POSIX e explicado em re_format(7) para o OS X. Esses tipos não suportam look-behind negativo.

Se você quiser uma sintaxe de expressão regular mais poderosa, combinada com a capacidade de grep s de pesquisar um diretório recursivamente para um padrão de expressão regular, considere usar ack , que é escrito em Perl e, portanto, suporta sua sintaxe regex, incluindo look-behind negativo.

O equivalente com ack seria:

ack '(?<!notthis)butthis'

Você pode instalar ack por meio de:

É importante notar que o GNU grep tem uma opção -P para ativar a sintaxe de regex compatível com Perl, no entanto ele não está incluído no OS X - você pode instalá-lo através do Homebrew se quiser com brew install grep . No Linux, estará disponível por padrão.

Se você estiver alternando bastante entre o Linux e o OS X, por exemplo, recomendo usar o GNU grep no OS X por padrão ou usar ack como uma substituição grep .

    
por 31.08.2013 / 23:09

Tags