Redireciona uma saída para um arquivo do comando piping grep

8

Estou executando isso:

cat /dev/urandom|hexdump| grep -i "ffff f" > random

e eu não obtenho nada no arquivo random , ele permanece com comprimento zero após o comando ser interrompido.

Como tornar a escrita de saída em um arquivo?

Eu preciso escrever um resultado para um arquivo, que deve conter dados de saída como este:

021bc40 7724 d4f5 59ec bcbb ffff fd26 ab3c 9b7c

03a9100 b3a5 8601 fa33 ffff f23c 4326 2e7f 0c8a

0449810 e459 d5af 4e11 ffff fc55 8660 9efb 3c9b

    
por Ruslan Gerasimov 26.06.2014 / 09:48

4 respostas

12

Use a opção --line-buffered para grep (e também se livre do cat inútil):

hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random

Desta forma, a saída não é armazenada em buffer, mas todas as linhas são colocadas em random imediatamente. Também recomendaria usar tee em seu canal para ver quantas linhas foram produzidas:

hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random
    
por Dubu 26.06.2014 / 10:39
3

Seu arquivo está vazio porque o processo é interrompido antes que o arquivo seja gravado no disco. É assim que o redirecionamento funciona. Como uma solução alternativa, tente isto:

script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random

Isso basicamente escreve toda a saída da tela para o arquivo.

    
por Jos 26.06.2014 / 10:08
3

cat /dev/urandom|hexdump ou hexdump /dev/urandom grava continuamente no stdout e se você pressionar Ctrl + C nada será executado após isto. Mas você pode limitar a saída com head

hexdump /dev/urandom | head -n1000000 | grep "ffff f" > random  

isso irá grep nas primeiras linhas de 1000000 da saída e grava o resultado em um arquivo.

    
por TuKsn 26.06.2014 / 10:31
1

Você precisará gravar a saída de cat /dev/urandom | hexdump em um arquivo antes de executá-lo na próxima vez. O script abaixo deve realizar o que você está tentando:

cat /dev/urandom | hexdump |
  while IFS= read -r line; do
    printf '%s\n' "$line" >> random;
  done

IFS é usado para dividir a saída em linhas aqui.

(Origem)

    
por jobin 26.06.2014 / 10:08