Ack-grep: символы избегают
Моя цель найти все<?=
"вхождения с Ack. Как я могу это сделать?
ack "<?="
Не работает Пожалуйста, скажите мне, как я могу исправить побег здесь?
4 ответа
Поскольку ack
использует регулярные выражения Perl, ваша проблема связана с тем, что в языке Perl RegEx, ?
является специальным символом, означающим "последнее совпадение необязательно". Так что вы ищете, это =
предшествует необязательный <
Так что вам нужно убежать от ?
если это просто предназначено для обычного персонажа.
Чтобы избежать, есть два подхода - либо <\?=
или же <[?]=
; некоторые люди считают, что вторая форма экранирования (помещение специального символа в класс символов) более читаема, чем обратная косая черта.
ОБНОВЛЕНИЕ Как любезно добавил Джош Келли в комментарии, третья форма побега заключается в использовании \Q
оператор, который экранирует все следующие специальные символы до \E
встречается следующим образом: \Q<?=\E
Вместо того, чтобы пытаться запомнить, какие символы нужно экранировать, вы можете использовать -Q, чтобы процитировать все, что нужно заключить в кавычки.
ack -Q "<?="
Это лучшее решение, если вы хотите найти с помощью простого текста.
(если вам не нужно искать по регулярному выражению.)
ack "<\?="
? является оператором регулярных выражений, поэтому ему нужно экранировать