Por que o 'grep fil *' falha?

9

Descobri que echo file|grep fil* falha, mas echo abcd|grep abc* é bem-sucedido.

Eu não entendo, alguém pode explicar?

    
por tmpbin 28.04.2016 / 07:37

1 resposta

31

Existem dois problemas com o seu exemplo.

A principal é que você está assumindo que expressões regulares funcionam da mesma forma que glob patterns em que * é um curinga que significa "qualquer seqüência de caracteres". Em expressões regulares, * significa "qualquer número do átomo anterior", então fil* significa f seguido por i seguido por zero ou mais l caracteres. Você precisa dizer grep fil.* para obter o significado pretendido: . significa "qualquer caractere único, de modo que .* signifique" qualquer sequência de caracteres. "

O menor problema é que você está usando caracteres especiais não citados que significam algo sob regras glob, o que significa que o shell pode interpretá-los. Se você tivesse arquivos no diretório local correspondentes aos padrões de glob fil* ou abc* , o shell iria expandi-los , então grep iria obter os nomes dos arquivos expandidos como um padrão, não o RE pretendido. Sempre que você estiver usando esses caracteres na linha de comando, você deve citá-los: echo file | grep 'fil.*' .

    
por 28.04.2016 / 07:48