escape character usado no grep

1
sh-4.3$ grep "hi +hello"                                                                                                                                                        
sh-4.3$ grep "hi +hello" test                                                                                                                                                   
sh-4.3$ grep "hi \+hello" test                                                                                                                                                  
hi hello                                                                                                                                                                        
hi  hello                                                                                                                                                                       
sh-4.3$ grep "hi *hello" test                                                                                                                                                   
hi hello                                                                                                                                                                        
hihello                                                                                                                                                                         
hi  hello                                                                                                                                                                       
sh-4.3$

No código acima, o caractere de escape é necessário com o caractere de regex '+', mas ao usar '*' o caractere de escape do caractere regex não é necessário.

Alguém pode explicar o motivo disso?

    
por Pankaj Pandey 21.11.2016 / 10:12

1 resposta

3

O padrão GNU grep reconhece BRE (expressões regulares básicas) e * é um metacaractere original no BRE, enquanto + é uma extensão do BRE. Para que + seja reconhecido como metacaractere no BRE, ele deve ser evitado. No entanto, se você disser grep para usar ERE (expressões regulares estendidas) usando o sinalizador -E , não será necessário escapar de nenhum metacaractere (se você escapar deles, eles se tornarão literais). Há um pouco de explicação no manual do grep e

$ grep -E 'hi +hello' test
hi hello
hi  hello

Você também pode usar egrep

$ egrep 'hi +hello' test
hi hello
hi  hello

Eu decido usar o BRE ou o ERE com base no número total de barras invertidas que terei que digitar ...

    
por Zanna 21.11.2016 / 10:17