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.