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.
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