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

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

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.


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.


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)


grep "ffff f"verpasst
Ruslan Gerasimov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.