【发布时间】:2011-06-13 06:32:22
【问题描述】:
我想查找字符串“methodname(”,但无法转义“(”。我怎样才能得到
grep methodname( *
或
ack-grep methodname( *
上班?
【问题讨论】:
我想查找字符串“methodname(”,但无法转义“(”。我怎样才能得到
grep methodname( *
或
ack-grep methodname( *
上班?
【问题讨论】:
解释( 有两件事:shell 和ack-grep。
您可以使用''、"" 或\ 将( 从外壳中转义,例如
grep 'methodname(' *
grep "methodname(" *
grep methodname\( *
grep 默认使用基本的正则表达式语言,所以( 并不特殊。 (如果你使用 egrep 或 grep -E 或 grep -P,那就是这样。)
另一方面,ack-grep 将 Perl 正则表达式作为输入,其中 ( 也很特殊,因此您也必须对其进行转义。
ack-grep 'methodname\(' *
ack-grep "methodname\\(" *
ack-grep methodname\\\( *
ack-grep 'methodname[(]' *
ack-grep "methodname[(]" *
ack-grep methodname\[\(\] *
【讨论】:
ack -Q 'methodname('
$ 为前缀。但话又说回来,如果你想搜索包含单引号的字符串,单引号会迫使你使用丑陋的转义:stackoverflow.com/questions/7254509/…
尝试在( 之前添加\。
小演示:
$ cat file
bar
methodname(
foo
$ grep -n methodname\( file
2:methodname(
$
用单引号或双引号将模式括起来也可以:
$ grep -n 'methodname(' file
2:methodname(
$ grep -n "methodname(" file
2:methodname(
$
【讨论】:
ack 'methodname\(' 或 ack -Q 'methodname('