Je cours ceci:
cat /dev/urandom|hexdump| grep -i "ffff f" > random
et je n’obtiens rien dans le fichier random
, sa longueur est égale à zéro après l’interruption de la commande.
Comment faire écrire 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
Utilisez l'option --line-buffered
pour grep
(et supprimez également l'inutile 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 immédiatement placée dans random
. Je recommanderais également d'utiliser tee
dans votre pipe pour voir combien de lignes ont été produites:
hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random
Votre fichier est vide car le processus est interrompu avant que le fichier ne soit écrit sur le disque. C'est ainsi que fonctionne la redirection. Pour contourner le problème, essayez ceci:
script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random
Cela va essentiellement écrire toutes les sorties d’écran dans le fichier.
cat /dev/urandom|hexdump
ou hexdump /dev/urandom
écrit en permanence sur la sortie standard et si vous appuyez sur Ctrl+C rien ne sera exécuté après cela. Mais vous pouvez limiter la sortie avec head
hexdump /dev/urandom | head -n1000000 | grep "ffff f" > random
cela va grep
dans les premières lignes 1000000 de la sortie et écrit le résultat dans un fichier.
Vous devrez écrire la sortie de cat /dev/urandom | hexdump
dans 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é pour diviser la sortie en lignes ici.