grep. * retorna resultados de .bash_history e reclama sobre

2

Sou novo no Linux e até agora tenho andado com alguns utilitários, especificamente com o utilitário grep. Eu decidi criar um novo arquivo (apropriadamente chamado de 'newfile') com o seguinte conteúdo:

Lady of the night,
I hold you close to me,
And everything is out of sight,
I think I'll be alright.

Quando eu tento executá-lo através do grep, digitando 'grep. * newfile', eu esperava apenas que as linhas do arquivo aparecessem; no entanto, imprimiu vários resultados, começando com:

grep: ..: Is a directory

E acompanhando a totalidade do .bash_history (que deixarei de fora por manter este post curto), e então o conteúdo do newfile. Porque isto é assim? Existe uma maneira que eu possa consertar isso? Eu tenho que alterar minha expressão regular?

    
por Charybdis 17.06.2015 / 19:55

3 respostas

5

Faça uma experiência! Executar

echo grep .* newfile

O que você pode concluir do resultado? Como o resultado muda quando você cita (coloca entre aspas simples ou duplas) o primeiro argumento a grep?

Se você quiser a droga direta, leia as especificações POSIX para a expansão do nome do caminho . Saber tudo sobre as várias expansões irá transformá-lo em um shell guru em pouco tempo: -)

    
por 17.06.2015 / 20:05
0

O shell está interpretando seu * , não passando para grep como regex. Para usar uma pesquisa de regex com grep , você terá que passar uma opção dizendo "isto é um regex" - na minha instalação, é -e . Experimente grep -e '.*' newfile .

    
por 17.06.2015 / 20:03
-2

Ao especificar o ponto antes do asterisco (. *) e o nome do arquivo (newfile), você está dizendo ao grep para procurar o padrão .\* no arquivo newfile, e o shell está expandindo .\* para incluir o arquivos de ponto em seu diretório.

Você provavelmente quer algo como:

cat newfile

que irá imprimir as linhas do seu arquivo.

    
por 17.06.2015 / 20:07