não conseguiu entender a saída do grep com expressão regular enquanto usava pipe

1

Tanto quanto eu sei, enquanto estiver usando regex com aspas simples do grep deve ser usado caso contrário o shell interpreta como caracteres glob (curinga) e executa uma expansão de nome de arquivo, mas no exemplo abaixo, o shell está tomando como regex embora a string de pesquisa não esteja entre aspas.

sh-4.3$ ls                                                                                                                                                                      
main.sh  test1  test2  test3.sh  test34  test3a                                                                                                                                 
sh-4.3$ ls | grep test3y*                                                                                                                                                       
test3.sh                                                                                                                                                                        
test34                                                                                                                                                                          
test3a                                                                                                                                                                          
sh-4.3$ 

Eu não consegui entender por que isso está acontecendo.

    
por Pankaj Pandey 21.11.2016 / 09:10

1 resposta

2

Isso funciona porque sua expressão test3y* não corresponde a nenhum nome de arquivo no diretório, por isso não é expandida para nada e é passada para grep literalmente tornando a regex válida ( y* = y may ocorrem zero ou mais vezes nessa posição).

Você ainda deve sempre citar sua regex!

    
por Zanna 21.11.2016 / 09:22