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

9

Ich leite das:

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 schreibe ich eine 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

Geben Sie hier die Bildbeschreibung ein

Ruslan Gerasimov
quelle

Antworten:

13

Verwenden Sie die --line-bufferedOption für grep(und entfernen Sie auch das Nutzlose cat):

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

Auf diese Weise wird die Ausgabe nicht gepuffert, sondern jede Zeile wird randomsofort eingegeben. Ich würde auch empfehlen, teein Ihrer Pipe zu verwenden, um zu sehen, wie viele Linien produziert wurden:

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

Ihre Datei ist leer, da der Prozess 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

Dadurch werden grundsätzlich alle Bildschirmausgaben in die Datei geschrieben.

Jos
quelle
Es handelte sich um einen weiteren Befehl, der jedoch ausgeführt wurde. Danke.
Ruslan Gerasimov
3

cat /dev/urandom|hexdumpoder hexdump /dev/urandomschreibt kontinuierlich in die Standardausgabe und wenn Sie Ctrl+ drücken C, wird danach nichts mehr ausgeführt. Sie können die Ausgabe jedoch mit einschränkenhead

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

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

TuKsn
quelle
Beteiligte einen weiteren Befehl, gab aber ein gutes Ergebnis. Danke.
Ruslan Gerasimov
1

Sie müssen die Ausgabe cat /dev/urandom | hexdumpin 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)

Job in
quelle
grep "ffff f"verpasst
Ruslan Gerasimov