2012-04-16 42 views
0

我想下面的查询,但没有成功如何使用引用来查找所有Java方法调用的实例?

grep -nr "[[:alnum:]]+\.[[:alnum:]]+\(\)" . 

所以,按照我的逻辑,一个方法调用是一个或多个字母数字字符

[[:alnum:]]+ 

后面跟着一个点

\. 

后跟一个或多个字母数字字符

[[:alnum:]]+ 

其次paranthesis(仅适用于返回类型为void)

\(\) 

但此查询是行不通的。如何编写这样的查询?

+0

一个方法调用可能没有点'.'如果调用方法是相同的类的一部分。 – anubhava 2012-04-16 19:43:28

+0

@anubhava是的,你是对的。我目前对使用引用调用的那些实例感兴趣。我修改了问题标题。 – CodeBlue 2012-04-16 19:46:39

回答

1

grep提供了几种类型的正则表达式语法。
您的模式是扩展语法,并与-E
extended-regexp一起使用有一个更容易/更好的语法,并且perl-regexp是,非常强大。

  • -E,--extended-regexp的
  • -F,--fixed串
  • -G,--basic-regexp的(缺省设置)
  • -P,--perl-正则表达式

grep -nrE "[[:alnum:]]+\.[[:alnum:]]+\(\)" . 
1

您需要使用“\ +”而不是“+”,否则它将直接匹配字符“+”。

+0

谢谢你。为什么我不需要使用反斜杠*,但需要使用反斜杠+? – CodeBlue 2012-04-16 19:49:06

+1

只是一个猜测:*比*更基本,因为你可以更容易地使用前者(以及关于正则表达式的理论论文全部使用*)来实现后者。符号*从第一版开始就有grep,但为了方便起见,\ +可能会在更高版本的grep中添加。它会被转义,以免破坏已经使用+作为文字匹配的现有正则表达式。 – sigfpe 2012-04-16 20:04:09

相关问题