Leiten Sie eine Ausgabe von der Befehlsleitung grep in eine Datei um

9

Ich führe das aus:

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

und ich bekomme nichts in der Datei random , es bleibt Null Länge, nachdem der Befehl unterbrochen wurde.

Wie schreibt man die Ausgabe in eine Datei?

Ich muss ein Ergebnis in eine Datei schreiben, die folgende Ausgabedaten enthalten sollte:

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

    
Ruslan Gerasimov 26.06.2014, 09:48

4 Antworten

12

Verwenden Sie die Option --line-buffered für grep (und entfernen Sie auch die unbrauchbare cat ):

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

Auf diese Weise wird die Ausgabe nicht zwischengespeichert, aber jede Zeile wird sofort in random eingefügt. Ich würde auch empfehlen, tee in Ihrer Pipe zu verwenden, um zu sehen, wie viele Zeilen produziert wurden:

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

Ihre Datei ist leer, da der Prozess unterbrochen wird, bevor die Datei auf die Festplatte geschrieben wird. So funktioniert die Umleitung. Um dieses Problem zu umgehen, versuchen Sie Folgendes:

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

Dies wird im Grunde alle Bildschirmausgabe in die Datei schreiben.

    
Jos 26.06.2014 10:08
3

cat /dev/urandom|hexdump oder hexdump /dev/urandom schreibt fortlaufend in das stdout und wenn Sie Strg + C drücken, wird danach nichts mehr ausgeführt. Aber Sie können die Ausgabe mit head

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

Dies wird grep in den ersten 1000000 Zeilen der Ausgabe und schreibt das Ergebnis in eine Datei.

    
TuKsn 26.06.2014 10:31
1

Sie müssen die Ausgabe von cat /dev/urandom | hexdump in eine Datei schreiben, bevor Sie sie das nächste Mal ausführen. Das folgende Skript sollte erreichen, was Sie versuchen:

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

IFS wird verwendet, um die Ausgabe hier in Zeilen aufzuteilen.

(Quelle)

    
jobin 26.06.2014 10:08

Tags und Links