My goal is to find all "<?=
" occurrences with ack. How can I do that?
ack "<?="
Doesn't work. Please tell me how can I fix escaping here?
My goal is to find all "<?=
" occurrences with ack. How can I do that?
ack "<?="
Doesn't work. Please tell me how can I fix escaping here?
Since
ack
uses Perl regular expressions, your problem stems from the fact that in Perl RegEx language,?
is a special character meaning "last match is optional". So what you are grepping for is=
preceded by an optional<
So you need to escape the
?
if that's just meant to be a regular character.To escape, there are two approaches - either
<\?=
or<[?]=
; some people find the second form of escaping (putting a special character into a character class) more readable than backslash-escape.UPDATE As Josh Kelley graciously added in the comment, a third form of escaping is to use the
\Q
operator which escapes all the following special characters till\E
is encountered, as follows:\Q<?=\E
This is the best solution if you will want to find by simple text.
(if you need not find by regular expression.)
Rather than trying to remember which characters have to be escaped, you can use -Q to quote everything that needs to be quoted.
? is a regex operator, so it needs escaping