Redirect output ke file dari grep perintah pipa

9

Saya menjalankan ini:

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

dan saya tidak mendapatkan apa-apa dalam file random, itu tetap nol panjang setelah perintah terputus.

Bagaimana membuatnya menulis output ke file?

Saya perlu menulis hasil ke file, yang harus berisi data keluaran seperti ini:

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

masukkan deskripsi gambar di sini

Ruslan Gerasimov
sumber

Jawaban:

13

Gunakan --line-bufferedopsi untuk grep(dan juga singkirkan yang tidak berguna cat):

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

Dengan cara ini output tidak buffered tetapi setiap baris randomlangsung dimasukkan ke dalam . Saya juga merekomendasikan untuk menggunakan teepipa Anda untuk melihat berapa banyak garis yang telah diproduksi:

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

File Anda kosong karena prosesnya terputus sebelum file tersebut ditulis ke disk. Itulah cara pengalihan bekerja. Sebagai solusinya, coba ini:

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

Ini pada dasarnya akan menulis semua output layar ke file.

Jos
sumber
Itu melibatkan satu perintah lagi, tetapi disampaikan. Terima kasih.
Ruslan Gerasimov
3

cat /dev/urandom|hexdumpatau hexdump /dev/urandommenulis terus menerus ke stdout dan jika Anda menekan Ctrl+ Ctidak ada yang akan dieksekusi setelah ini. Tetapi Anda dapat membatasi output denganhead

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

ini akan grepdi baris 1000000 pertama dari output dan menulis hasilnya ke file.

TuKsn
sumber
Terlibat satu perintah lagi, tetapi memberi hasil yang baik. Terima kasih.
Ruslan Gerasimov
1

Anda harus menulis output cat /dev/urandom | hexdumpke file sebelum Anda menjalankannya di waktu berikutnya. Script di bawah ini harus memenuhi apa yang Anda coba:

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

IFS digunakan untuk membagi output menjadi beberapa baris di sini.


(Sumber)

pekerjaan
sumber
grep "ffff f"terjawab
Ruslan Gerasimov