Compreendendo grep e pipes no Linux

Compreendendo grep e pipes no Linux

eu me depareiessepost que explica meu problema. Suponha que exista um arquivo chamado file.txtque contenha "foo World".
A resposta postada por Tyler explica muito, mas estou confuso sobre como

cat file.txt | grep "foo"

é similar a

grep "foo" file.txt

Eu pensei grepque era necessário 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 Worldse torna a entrada do grep? Estou correcto? Se sim, pensei que grepera necessário um caminho de arquivo como uma string?

Responder1

A maioria dos comandos pode lidar com entradas que são um arquivo que precisam ser abertos 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 do lado esquerdo, é configurada e alimentada para o comando que está do lado direito do STDIN do pipe.

Se o conteúdo não estiver sendo passado via STDOUT -> STDIN por meio de um pipe, os comandos poderão receber dados abrindo arquivos que são passados ​​​​por nome por meio de 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 grepSTDIN por meio 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 diretamente via STDIN.

$ grep 5 < <(cat file)
5

Aqui estou demonstrando que o conteúdo de filepode ser direcionado grepvia STDIN acima.

informação relacionada