Pertanyaan Bagaimana cara saya mengolah file biner yang terlihat seperti teks?


Saya memiliki file biner yang seharusnya berupa teks (mereka mengekspor log), tetapi saya tidak dapat membukanya dengan lebih sedikit (terlihat jelek - ini tampak seperti file biner). Saya menemukan bahwa saya bisa membukanya dengan vi dan saya dapat mengelusnya (Anda akan melihat log sebenarnya), tetapi yang ingin saya lakukan adalah melihat melalui mereka (tanpa harus membuka masing-masing dengan vi dan kemudian melakukan pencarian). Apakah ada cara bagi saya untuk melakukan itu?


76
2017-11-05 15:03




serverfault.com/questions/51477/… - quanta
Apakah kamu mencoba grep -a? - quanta
stackoverflow.com/questions/9988379/… - Ciro Santilli 新疆改造中心 六四事件 法轮功


Jawaban:


Kamu bisa memakai grep Bagaimanapun juga untuk mencari melalui file - itu tidak benar-benar peduli jika file input benar-benar teks atau tidak. Dari 'man grep':

    -a, --text
          Process a binary file as if it were text; this is equivalent to the --binary-files=text option.

   --binary-files=TYPE
          If  the  first few bytes of a file indicate that the file contains binary data, assume that the file is
          of type TYPE.  By default, TYPE is binary, and grep normally outputs either a one-line  message  saying
          that a binary file matches, or no message if there is no match.  If TYPE is without-match, grep assumes
          that a binary file does not match; this is equivalent  to  the  -I  option.   If  TYPE  is  text,  grep
          processes  a  binary  file  as  if  it  were  text; this is equivalent to the -a option.  Warning: grep
          --binary-files=text might output binary garbage, which can have nasty side effects if the output  is  a
          terminal and if the terminal driver interprets some of it as commands.

Silakan tandai kata-kata peringatan di akhir paragraf kedua. Anda mungkin ingin mengarahkan hasil dari grep ke file baru dan memeriksa ini dengan vi / kurang.


85
2017-11-05 15:48



grep tidak benar-benar berfungsi. coba grep pada perangkat penyimpanan. itu akan kehabisan memori. ia memiliki mekanisme penyangga internal yang rusak yang bergantung pada garis panjang yang wajar. - user239558


Pipa melalui strings, yang akan menghapus semua kode biner hanya meninggalkan teks.


41
2017-11-05 15:09



Ide bagus, terima kasih :) [tidak OP] - Karel Bílek
strings rupanya tidak mengerti utf-8 adalah teks. - Javier


Memberikan bgrep mencoba. (rilis asli / garpu yang lebih baru)


6
2017-11-05 16:07



Saya pikir ini adalah jawaban terbaik di sini. Sangat menjengkelkan melihat implementasi yang buruk dari pencarian biner seperti di sini commandlinefu.com/commands/matching/grep-binary/… dimana melarikan diri \x tidak benar-benar berfungsi seperti di sini grep -P "\x05\x00\xc0" mybinaryfile. - Léo Léopold Hertz 준영
saya berlari bgrep "fafafafa" test_27.6.2015.bin |less tapi dapatkan test_27.6.2015.bin: 00005ee4. Saya akan berasumsi mendapatkan fafafafa, sejak aku mencari ini. Tidak ada manual dalam manusia. Tahu mengapa output seperti itu? - Léo Léopold Hertz 준영
Saya membuka utas baru tentang fungsi bgrep di sini stackoverflow.com/q/31135561/54964 - Léo Léopold Hertz 준영
apa perbedaannya grep -a? - rubo77
Sayangnya, bash: bgrep: command not found... dan No package bgrep available. - jww


Anda dapat menggunakan tiga perintah berikut:

  1. grep -a <sth> file.txt

  2. cat -v file.txt | grep <sth>

  3. cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>


5
2018-06-17 10:43



tr tampaknya tidak bekerja pada kotak 10 solaris saya. Tes sederhana: echo -e 'x \ ty' | tr '[\ 000- \ 011 \ 013- \ 037 \ 177- \ 377]' '.' tidak menerjemahkan tab. - user55570


Dimulai dengan Grep 2.21, file biner adalah diperlakukan berbeda:

Ketika mencari data biner, grep sekarang dapat memperlakukan byte non-teks sebagai garis   terminator. Ini dapat meningkatkan kinerja secara signifikan.

Jadi yang terjadi sekarang adalah dengan data biner, semua byte non-teks (termasuk baris baru) diperlakukan sebagai pemisah baris. Jika Anda ingin mengubah ini perilaku, Anda dapat:

  • menggunakan --text. Ini akan memastikan bahwa hanya baris baru adalah terminator garis

  • menggunakan --null-data. Ini akan memastikan bahwa hanya byte nol adalah terminator garis


1
2017-07-18 00:19