o que há de errado com meu comando grep?

1

O grep funciona quando eu uso é com ls | , mas quando eu tento o comando por si só, ele me dá um cursor piscante que nunca desaparece na próxima linha (como se estivesse executando um comando).

Por exemplo, tentei:

ls | grep zip

enquanto no diretório bin e tenho uma lista de arquivos, mas grep zip no mesmo diretório me fornece o problema declarado acima.

    
por thinksinbinary 27.01.2016 / 02:19

2 respostas

3

De man grep (grifo meu):

grep  searches the named input FILEs (or standard input if no files are
named, or if a single hyphen-minus (-) is given as file name) for lines
containing  a  match to the given PATTERN.  By default, grep prints the
matching lines.

Se você executou grep sem um nome de arquivo ou um canal (o | in ls | grep ):

grep foo

A entrada padrão é o terminal - isto é, você. Você precisa fornecer a entrada que grep pesquisará.

$ grep foo
this is me typing stuff
now I'm typing foo, which will get printed again because grep matched foo     
now I'm typing foo, which will get printed again because grep matched foo
    
por muru 27.01.2016 / 02:29
2

grep toma um arquivo ou (arquivos) como sua entrada, quando nenhum nome de arquivo é dado grep lê da entrada padrão (descritor de arquivo 0).

Quando você executa ls | grep 'something' , está redirecionando a saída padrão do comando ls para grep da entrada padrão via canal (é o que o | faz).

Enquanto no último caso quando você apenas faz grep 'something' , não há nenhum nome de arquivo dado e portanto grep lerá seu STDIN para entrada, nenhum canal está envolvido aqui então você precisa digitar algo no STDIN (dar entrada ) para ver a saída.

Exemplo:

% grep 46
245
480
460
460

Como você pode ver, grep correspondeu 46 do meu conteúdo digitado e mostrou em STDOUT. BTW para fechar a sessão de entrada interativa, pressione Ctrl + D que indica EOF (Fim do Arquivo) (neste caso, leia-o como "Fim da Entrada").

    
por heemayl 27.01.2016 / 02:32