Pertanyaan Alihkan output ke file dari perintah pemipaan grep


Saya menjalankan ini:

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

dan saya tidak mendapatkan apa-apa random, tetap nol panjang setelah perintah terganggu.

Bagaimana cara membuatnya menulis ke file?

Saya perlu menulis hasil ke file, yang seharusnya 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

enter image description here


9
2018-06-26 07:48


asal




Jawaban:


Menggunakan --line-buffered opsi 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 dimasukkan ke dalam random segera. Saya juga merekomendasikan untuk menggunakannya tee dalam pipa Anda untuk melihat berapa banyak garis yang telah dihasilkan:

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

12
2018-06-26 08:39



Sempurna melakukan triknya. Terima kasih banyak. - Ruslan Gerasimov


File Anda kosong karena prosesnya terganggu sebelum file ditulis ke disk. Begitulah 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.


3
2018-06-26 08:08



Itu melibatkan satu perintah lagi, tetapi dikirimkan. Terima kasih. - Ruslan Gerasimov


cat /dev/urandom|hexdump atau hexdump /dev/urandom tulis terus menerus ke stdout dan jika Anda menekan Ctrl+C tidak ada yang akan dieksekusi setelah ini. Tetapi Anda dapat membatasi output dengan head

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

ini akan grep di baris 1000000 pertama dari output dan tulis hasilnya ke file.


3
2018-06-26 08:31



Terlibat satu perintah lagi, tetapi memberi hasil yang bagus. Terima kasih. - Ruslan Gerasimov


Anda harus menulis hasilnya cat /dev/urandom | hexdump ke file sebelum Anda menjalankannya di lain waktu. Skrip di bawah ini harus menyelesaikan 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 garis di sini.


(Sumber)


1
2018-06-26 08:08



grep "ffff f" tidak terjawab - Ruslan Gerasimov