grep * gcc * não corresponde a nada

1

Estou usando o seguinte código

$ rpm -qa | grep -i gcc
libgcc-4.8.3-7.fc20.i686
gcc-c++-4.8.3-7.fc20.x86_64
gcc-4.8.3-7.fc20.x86_64
libgcc-4.8.3-7.fc20.x86_64

$ rpm -qa | grep -i *gcc*
$ 

Eu esperaria que a segunda maneira fizesse o mesmo que a primeira, mas ela não imprime nada. Estou usando o comando grep corretamente?

    
por Rajeshwar 22.10.2014 / 01:43

1 resposta

2

Uma maneira seria usar egrep ou grep -E assim:

rpm -qa | egrep -i '.*gcc.*'

Isso usa a string de pesquisa fornecida como uma expressão regular, em que o ponto (.) representa qualquer caractere e o asterisco (*) representa um ou mais desses caracteres.

O que eu acredito que você está tentando usar com rpm -qa | grep -i *gcc* é um recurso da maioria dos shells chamados globbeam de nome de arquivo. Essa técnica não funciona com o grep. Ele pressupõe que você quer tudo com gcc na string, como em seu primeiro exemplo, sem a necessidade de especificá-lo explicitamente.

Editar: A diferença entre *gcc* e .*gcc.* é a primeira, na verdade, é um erro de sintaxe com o egrep, embora possa não lhe dizer. O asterisco (*) é um modificador que informa ao analisador de expressões regulares que você está interessado em zero ou mais do caractere anterior. Na primeira expressão, não há nenhum caractere anterior porque a aspa simples (') não conta.

    
por 22.10.2014 / 01:50

Tags