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