Моя цель состоит в том, чтобы найти все"<?=
"случаи с ack. Как я могу сделать это?
ack "<?="
Не работает. Скажите мне, как я могу зафиксировать выход здесь?
Поскольку ack
использует регулярные выражения Perl, ваша проблема связана с тем, что в языке Perl RegEx, ?
- это специальный символ, означающий "последнее совпадение необязательно". Поэтому вы ищете =
, которому предшествует необязательный <
Поэтому вам нужно экранировать ?
, если это просто регулярный символ.
Для экранирования есть два подхода - либо <\?=
, либо <[?]=
; некоторые люди находят вторую форму экранирования (помещение специального символа в класс символов) более читабельной, чем backslash-escape.
UPDATE Как любезно добавил в комментарии Джош Келли, третья форма экранирования заключается в использовании оператора \Q
, который экранирует все следующие специальные символы, пока не встретится \E
, следующим образом: \Q=\E
ack "<\?="
? является оператором регулярного выражения, поэтому необходимо экранировать
Вместо того чтобы пытаться запомнить, какие символы должны быть экранированы, вы можете использовать -Q для цитирования всего, что должно быть процитировано.