Команда grep не поддерживает начальные '^' и '$' якоря конца строки, когда она с -Pz

? является особенным (используется как в glob, так и в раскрытии истории, см. zshexpn (1) ), поэтому требует экранирование, но в противном случае может использоваться как псевдоним, хотя, вероятно, не следует использовать его, учитывая, что он особенный.

% alias \?='echo hi'
% ?
hi
4
15.09.2017, 08:01
1 ответ

Это - желаемое поведение GNU grep версии 2.24 (выпущено 10 марта 2016 г.) и выше, и это исправление ошибки, появившейся в GNU grep 2.5.

Изучение исходного кода :

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

Это изменение было внесено 21 февраля 2016 г., см. этот отчет об ошибке для получения дополнительных сведений об этом изменении.


Хотя это выбор GNU grep, это ошибка, поскольку GNU grep компилирует регулярное выражение PCRE с PCRE_MULTILINE , установленным , а также вернулся к вызову pcre_exec для более чем одной записи. в то время , что является источником проблемы, как указано Стефаном Шазеласом

5
27.01.2020, 20:55

Теги

Похожие вопросы