Ack-grep: символы избегают

Моя цель найти все<?="вхождения с Ack. Как я могу это сделать?

ack "<?="

Не работает Пожалуйста, скажите мне, как я могу исправить побег здесь?

4 ответа

Решение

Поскольку ack использует регулярные выражения Perl, ваша проблема связана с тем, что в языке Perl RegEx, ? является специальным символом, означающим "последнее совпадение необязательно". Так что вы ищете, это = предшествует необязательный <

Так что вам нужно убежать от ? если это просто предназначено для обычного персонажа.

Чтобы избежать, есть два подхода - либо <\?= или же <[?]=; некоторые люди считают, что вторая форма экранирования (помещение специального символа в класс символов) более читаема, чем обратная косая черта.

ОБНОВЛЕНИЕ Как любезно добавил Джош Келли в комментарии, третья форма побега заключается в использовании \Q оператор, который экранирует все следующие специальные символы до \E встречается следующим образом: \Q<?=\E

Вместо того, чтобы пытаться запомнить, какие символы нужно экранировать, вы можете использовать -Q, чтобы процитировать все, что нужно заключить в кавычки.

ack -Q "<?="

Это лучшее решение, если вы хотите найти с помощью простого текста.

(если вам не нужно искать по регулярному выражению.)

ack "<\?="

? является оператором регулярных выражений, поэтому ему нужно экранировать

Другие вопросы по тегам