Significado do asterisco (*) no grep

0
[USERNAME@host ~] echo -e 'prdxxx\ndadxxx' | grep "da*xxx"
prdxxx
dadxxx
[USERNAME@host ~] echo $SHELL
/bin/bash
[USERNAME@host ~] dpkg -l | grep -iw bash
ii  bash                                    4.1-2ubuntu3                                    The GNU Bourne Again SHell
ii  bash-completion                         1:1.1-3ubuntu2                                  programmable completion for the bash shell
[USERNAME@host ~] 

Por que da*xxx encontra prdxxx também? Não contém da ... eu encontrei um bug grep? ou isso é uma característica?

    
por gasko peter 02.01.2013 / 08:52

2 respostas

9

Está funcionando bem de acordo com o significado do '*'.

* - > 0 ou mais ocorrências de caractere anterior.

Como você está verificando um *, isso corresponderá a 0 ou mais a's. Isso significa que da*xxx pode corresponder a dxxx, daxxx, daaxxx, daaaxxx e assim por diante.

    
por 02.01.2013 / 09:05
2

Existe uma diferença entre os padrões normais de nome de arquivo do shell (chamado glob ), em que * corresponde qualquer número de caracteres desconhecidos, e expressões regulares que são usadas, por exemplo, por grep , onde * significa zero ou mais ocorrências do anterior padrão (esse é o caractere a em seu exemplo).

    
por 02.01.2013 / 12:42