grep para uma ou mais ocorrências de uma palavra

0

Eu quero procurar a ocorrência do tipo. super([A-Za-z]+ , self) em uma base de código.

quando estou indo para $ grep -nr '[s][u][p][e][r][(]' . está me mostrando todas as linhas que tem super( ,
Quando eu tentei procurar o abaixo com [A-Za-z] +, eu não estou obtendo qualquer resultado.Pode alguém, por favor, me ajude a procurar por todas as linhas na minha codebase que tem super(*word* , self) .

anupam:codebase-2.0$ grep -nr '[s][u][p][e][r][(][A-Za-z]+' .
anupam:codebase-2.0$ 
    
por lazarus 24.09.2018 / 11:58

1 resposta

1

Por padrão, grep usa BRE (expressões regulares básicas), o que significa que caracteres especiais como + serão interpretados como um caractere literal. Portanto, no GNU grep, ele precisará ser escapado, isto é, escrito como /+ . (Como alternativa, você poderia usar ERE (expressão regular estendida) com o sinal -E ; consulte man grep para obter mais informações.) Portanto, seu comando pode ser escrito assim:

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

Além disso, o […] ao redor de cada letra é desnecessário. […] é usado para especificar uma classe de caracteres, por ex. [ab] pode corresponder a a ou b . Se houver uma única letra no […] , essa será a única correspondência. Assim, seu código poderia ser simplificado ainda mais para

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

N.B. De acordo com Stéphane Chazelas 's comentário , a construção \+ é uma extensão GNU. Se isso não funcionar, você pode tentar \{1,\} .

    
por 24.09.2018 / 13:54

Tags