Você pode descartar cat
completamente e, em seguida, redirecionar a saída de grep
para o arquivo de resultado:
grep -i "osx" test.txt >q1.txt
Isso pesquisará linhas em test.txt
contendo a string osx
(sem distinção entre maiúsculas e minúsculas) e armazenará essas linhas em q1.txt
. Se o arquivo q1.txt
existir, ele será truncado (esvaziado) antes que a saída seja armazenada nele.
Se você deseja anexar a saída no final do arquivo, use >>
em vez de >
como o operador de redirecionamento.
Seu comando:
cat q1.txt | grep -i "osx" test.txt
O que isso realmente faz é iniciar cat
e grep
simultaneamente. cat
lerá de q1.txt
e tentará gravar em sua saída padrão, que é conectada à entrada padrão de grep
.
No entanto, como você está dando a grep
um arquivo para ler, ele ignorará totalmente o que o cat
está enviando.
No final, todas as linhas em test.txt
que contiverem a string osx
serão enviadas para o terminal.
Há algo frequentemente chamado de "uso inútil de cat
", o que significa que uma invocação de cat
pode ser completamente removida e que o arquivo pode ser lido diretamente por outra ferramenta.
O exemplo extremo disso seria:
cat test.txt | cat | cat | cat | grep -i "osx" | cat | cat >q1.txt
mas mesmo apenas
cat test.txt | grep -i "osx" >q1.txt
é inútil, pois grep
é perfeitamente capaz de ler de um arquivo por si só (como visto acima). Mesmo que não tenha capacidade de abrir test.txt
, pode-se escrever
grep -i "osx" <test.txt >q1.txt
para dizer que a entrada padrão deve vir do arquivo test.txt
e que a saída padrão deve ir para o arquivo q1.txt
Use cat
somente ao concatenar dados (é o principal uso). Existem alguns outros usos de cat
também, mas está fora do escopo desta questão.
Relacionados: