Reindirizzare un output su un file dal comando piping grep


9

Sto eseguendo questo:

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

e non ottengo nulla nel file random, rimane di lunghezza zero dopo l'interruzione del comando.

Come farlo scrivere l'output su un file?

Devo scrivere un risultato in un file, che dovrebbe contenere dati di output come questo:

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

inserisci qui la descrizione dell'immagine

Risposte:


13

Usa l' --line-bufferedopzione per grep(e sbarazzati anche degli inutili cat):

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

In questo modo l'output non è bufferizzato ma ogni riga viene inserita randomimmediatamente. Vorrei anche raccomandare di utilizzare teenella tua pipe per vedere quante linee sono state prodotte:

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

3

Il file è vuoto perché il processo viene interrotto prima che il file venga scritto sul disco. Ecco come funziona il reindirizzamento. Per ovviare al problema, prova questo:

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

Questo sostanzialmente scriverà tutto l'output dello schermo nel file.


Comprendeva un altro comando, ma consegnato. Grazie.
Ruslan Gerasimov,

3

cat /dev/urandom|hexdumpo hexdump /dev/urandomscrive continuamente nello stdout e se si preme Ctrl+ Cnulla verrà eseguito dopo questo. Ma puoi limitare l'output conhead

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

questo sarà grepnelle prime 1000000 righe dell'output e scrive il risultato in un file.


Ha richiesto un altro comando, ma ha dato un buon risultato. Grazie.
Ruslan Gerasimov,

1

Sarà necessario scrivere l'output di cat /dev/urandom | hexdumpin un file prima di eseguirlo la volta successiva. Lo script seguente dovrebbe realizzare ciò che stai provando:

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

IFS viene utilizzato per dividere l'output in righe qui.


(Fonte)


grep "ffff f"mancato
Ruslan Gerasimov il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.