No seu primeiro exemplo
cat f.txt | grep "someText"
grep
não recebe um argumento de nome de arquivo, apenas uma string para procurar. Nesse caso, grep
lerá o texto para pesquisar a partir da entrada padrão. Nesse caso, essa entrada padrão é canalizada a partir da saída de cat f.txt
, que gera o conteúdo do arquivo , não o nome do arquivo.
O que você também poderia ter feito para fazer grep
ler a partir de stdin é usar:
< f.txt grep "someText"
Usar cat
é muitas vezes redundante por si só (independente de grep
) e pode ser substituído pelo redirecionamento de entrada como acima. Eu sempre usaria o segundo formulário no seu exemplo, a menos que você tenha que fazer um pré-processamento na entrada.