Como a grep uma palavra de um arquivo e armazená-lo em outro arquivo existente?

2

Como a grep uma palavra de um arquivo e armazená-lo em outro arquivo existente?

O que eu tentei é

cat q1.txt | grep -i "osx" test.txt

Eu quero fazer o grep do test.txt e armazená-lo no q1, mas isso e o contrário não funciona

    
por user254472 07.10.2017 / 07:50

1 resposta

4

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:

por 07.10.2017 / 08:22

Tags