it-swarm.com.de

Leiten Sie eine Ausgabe von Command Piping Grep in eine Datei um

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 wird.

Wie schreibt man eine Ausgabe in eine Datei?

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

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

enter image description here

9

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

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

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

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

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

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

Dies schreibt im Grunde alle Bildschirmausgaben in die Datei.

3
Jos

cat /dev/urandom|hexdump oder hexdump /dev/urandom schreibt fortlaufend auf die Standardausgabe und wenn Sie drücken Ctrl+C danach wird nichts mehr ausgeführt. Sie können die Ausgabe jedoch 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.

3
TuKsn

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 das 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)

1
jobin