grep 用于一个或多个单词的出现

laz*_*rus 3 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$ 
Run Code Online (Sandbox Code Playgroud)

Spa*_*awk 6

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

grep -nr '[s][u][p][e][r][(][A-Za-z]\+'
Run Code Online (Sandbox Code Playgroud)

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

grep -nr 'super([A-Za-z]\+'
Run Code Online (Sandbox Code Playgroud)

注意 根据Stéphane Chazelas评论,该\+构造是 GNU 扩展。如果这不起作用,您可以\{1,\}改为尝试。