Eu encontrei esta postagem que explica meu problema. Suponha que haja um arquivo chamado file.txt que contém “foo World”.
A resposta postada por Tyler explica muita coisa, mas estou confuso sobre como

cat file.txt | grep "foo" 

é semelhante a

grep "foo" file.txt 

Eu pensei que grep exigisse 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 isso se torna a entrada do grep? Estou correcto? Se sim, pensei que grep requeria um caminho de arquivo como uma string?

Comentários

  • No grep(1) página do manual (digite man grep), você verá “grep [options] PATTERN [FILE …]”. O fato de “FILE” ser seguido por “…” significa que pode haver vários argumentos de arquivo; o fato de estar entre colchetes ([]) significa que o argumento do arquivo é opcional (ou seja, não tem para ser qualquer). Continue lendo e você verá que “ Grep pesquisa os ARQUIVOS de entrada nomeados (ou entrada padrão, se nenhum arquivo for nomeado, ou o nome do arquivo - é fornecido)…. ” Então: se nenhum arquivo for especificado, grep pesquisa a entrada padrão.

Resposta

A maioria dos comandos pode lidar com a entrada é 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 é enviada para outro comando através de um tubo (|) a saída via STDOUT que “é passada para o tubo no lado esquerdo, é configurada e alimentada para o comando que “s no lado direito do tubo” s STDIN.

Se o conteúdo não está sendo passado via STDOUT -> STDIN por meio de um tubo, os comandos podem receber dados abrindo arquivos que são passados por nome via argumentos de linha de comando.

Exemplos

Envia a saída para STDOUT.

$ cat file 1 2 3 4 5 

Saída de cat file é enviado via STDOUT para grep” s STDIN via 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, “m demonstrando que o conteúdo de file pode ser direcionado para grep via STDIN acima.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *