I want to look for the string "methodname(", but I am unable to escape the "(". How can I get
grep methodname( *
or
ack-grep methodname( *
to work?
These special characters, called metacharacters, also have special meaning to the system and need to be quoted or escaped. Whenever you use a grep regular expression at the command prompt, surround it with quotes, or escape metacharacters (such as & ! . * $ ? and \ ) with a backslash ( \ ).
If you include special characters in patterns typed on the command line, escape them by enclosing them in single quotation marks to prevent inadvertent misinterpretation by the shell or command interpreter.
If you're searching binary files, then you must use grep because ack will ignore them, always. When searching through a few large files, grep will be faster than ack.
There's two things interpreting the (
: the shell, and ack-grep
.
You can use ''
, ""
, or \
to escape the (
from the shell, e.g.
grep 'methodname(' *
grep "methodname(" *
grep methodname\( *
grep
uses a basic regular expression language by default, so (
isn't special. (It would be if you used egrep
or grep -E
or grep -P
.)
On the other hand, ack-grep
takes Perl regular expressions as input, in which (
is also special, so you'll have to escape that too.
ack-grep 'methodname\(' *
ack-grep "methodname\\(" *
ack-grep methodname\\\( *
ack-grep 'methodname[(]' *
ack-grep "methodname[(]" *
ack-grep methodname\[\(\] *
Try adding a \
before the (
.
Small demo:
$ cat file
bar
methodname(
foo
$ grep -n methodname\( file
2:methodname(
$
Enclosing the pattern in single or double quotes also works:
$ grep -n 'methodname(' file
2:methodname(
$ grep -n "methodname(" file
2:methodname(
$
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With