grep 查找某个单词出现一次或多次

grep 查找某个单词出现一次或多次

我想搜索 type 的出现。 super([A-Za-z]+ , self) 在代码库中。

当我要向 $ grep -nr '[s][u][p][e][r][(]' .我显示所有包含 的行时super(
当我尝试使用 [A-Za-z]+ 搜索下面的行时,我没有得到任何结果。有人可以帮我搜索所有行吗在我的代码库中有super(*word* , self)

anupam:codebase-2.0$ grep -nr '[s][u][p][e][r][(][A-Za-z]+' .
anupam:codebase-2.0$ 

答案1

默认情况下,grep使用 BRE(基本正则表达式),这意味着像这样的特殊字符+将被解释为文字字符。因此,在 GNU grep 中,需要对其进行转义,即写为\+. (或者,您可以使用带有标志的 ERE(扩展正则表达式)-E;请参阅 参考资料man grep来了解更多信息。)因此,您的命令可以写成这样:

grep -nr '[s][u][p][e][r][(][A-Za-z]\+'

另外,[…]每个字母周围都是不必要的。[…]用于指定字符类,例如[ab]可以匹配a 或者 b。如果 中只有一个字母[…],则这是唯一的匹配项。因此,您的代码可以进一步简化为

grep -nr 'super([A-Za-z]\+'

注:根据斯蒂芬·查泽拉斯评论,该\+构造是 GNU 扩展。如果这不起作用,您可以尝试\{1,\}一下。

相关内容