Rediriger une sortie vers un fichier à partir de la commande piping grep

9

Je lance ceci:

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

et je ne reçois rien dans le fichier random, il reste de longueur nulle après l'interruption de la commande.

Comment faire en sorte qu'il écrive la sortie dans un fichier?

J'ai besoin d'écrire un résultat dans un fichier, qui devrait contenir des données de sortie comme ceci:

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

entrez la description de l'image ici

Ruslan Gerasimov
la source

Réponses:

13

Utilisez l' --line-bufferedoption pour grep(et supprimez également les inutiles cat):

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

De cette façon, la sortie n'est pas mise en mémoire tampon, mais chaque ligne est mise randomimmédiatement. Je recommanderais également d'utiliser teedans votre pipe pour voir combien de lignes ont été produites:

hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random
Dubu
la source
3

Votre fichier est vide car le processus est interrompu avant que le fichier ne soit écrit sur le disque. Voilà comment fonctionne la redirection. Pour contourner ce problème, essayez ceci:

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

Cela écrit essentiellement toutes les sorties d'écran dans le fichier.

Jos
la source
Il impliquait une commande de plus, mais livré. Je vous remercie.
Ruslan Gerasimov
3

cat /dev/urandom|hexdumpou hexdump /dev/urandomécrit en continu sur la sortie standard et si vous appuyez sur Ctrl+, Crien ne sera exécuté après cela. Mais vous pouvez limiter la sortie avechead

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

ce sera grepdans les premières 1000000 lignes de la sortie et écrit le résultat dans un fichier.

TuKsn
la source
Impliqué une commande de plus, mais a donné un bon résultat. Je vous remercie.
Ruslan Gerasimov
1

Vous devrez écrire la sortie de cat /dev/urandom | hexdumpdans un fichier avant de l'exécuter la prochaine fois. Le script ci-dessous devrait accomplir ce que vous essayez:

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

IFS est utilisé ici pour diviser la sortie en lignes.


(La source)

jobin
la source
grep "ffff f"manqué
Ruslan Gerasimov