Compreendendo o grep e pipes no linux

2

Me deparei com esta postagem que explica meu problema. Suponha que haja um arquivo chamado file.txt que contenha "foo World".
A resposta postada por Tyler explica muito, no entanto, estou confuso sobre como

cat file.txt | grep "foo"

é semelhante a

grep "foo" file.txt

Eu achei que grep exigiu o seguinte

grep input argument  // input is the string to search for (i.e) foo and
                     //  argument is the file path (./file.txt)

Agora, a saída de cat file.txt é o conteúdo do arquivo que é foo World e se torna a entrada do grep ? Estou correcto? Em caso afirmativo, achei que grep exigiu um caminho de arquivo como uma string?

    
por Rajeshwar 14.10.2014 / 07:02

1 resposta

3

A maioria dos comandos pode lidar com a entrada que é um arquivo que eles precisam abrir para entrada, ou como um fluxo de dados que é passado para o comando via STDIN.

Quando o conteúdo de cat file.txt é enviado para outro comando através de um pipe ( | ), a saída via STDOUT que é passada para o pipe no lado esquerdo, é configurada e alimentada para o comando que está no lado direito do STDIN do tubo.

Se o conteúdo não estiver sendo transmitido via STDOUT - > STDIN via pipe, então os comandos podem receber dados abrindo arquivos que são passados pelo nome via argumentos de linha de comando.

Exemplos

Envia a saída para STDOUT.

$ cat file 
1
2
3
4
5

A saída de cat file é enviada via STDOUT para STDIN de grep através do pipe.

$ cat file | grep 5
5

Processando o arquivo como um argumento de linha de comando.

$ grep 5 file 
5

Processando o conteúdo do arquivo via STDIN diretamente.

$ grep 5 < <(cat file)
5

Aqui estou demonstrando que o conteúdo de file pode ser direcionado para grep via STDIN acima.

    
por 14.10.2014 / 07:08