grep não suporta start '^' e '$' final de linha de âncoras quando está com -Pz

4

Com referência de este questionário sobre a AU .

Por que o comportamento do parâmetro grep do% GNU-Pz foi alterado e não oferece suporte ao início da linha ^ e $ fim da linha de âncoras?

Isso é um bug ou um comportamento correto?

Testado no Ubuntu 16.04 com a versão do kernel 4.4.0-21-generic.

$ echo ^ | grep -Pz ^
grep: unescaped ^ or $ not supported with -Pz
    
por αғsнιη 18.11.2016 / 12:41

1 resposta

4

Este é o comportamento desejado do GNU grep versão 2.24 (lançado em 10 de março de 2016) e acima, e essa é a correção para o bug que foi introduzido no GNU grep 2.5.

Analisando o código-fonte :

if (*p == '$' || (*p == '^' && !after_unescaped_left_bracket))
  die (EXIT_TROUBLE, 0,
       _("unescaped ^ or $ not supported with -Pz"));

Esta alteração foi feita em 21 de fevereiro de 2016, veja este relatório de erros para mais detalhes sobre esta mudança.

Apesar de ser uma escolha do GNU grep, é um bug, como o GNU grep compila o regex PCRE com PCRE_MULTILINE set e também revertido para chamar pcre_exec para mais de um registro de cada vez , que é fonte de problemas, como apontado por Stéphane Chazelas

    
por 18.11.2016 / 13:02

Tags