Soru Metin gibi görünen ikili dosyalar aracılığıyla nasıl greplenir?


Metin olması gereken ikili dosyalarım var (bunlar günlükleri dışa aktarıyor), ancak daha azıyla açamıyorum (çirkin görünüyor - ikili dosyaya benziyor). Onu vi ile açabileceğimi ve onu gizleyebileceğimi keşfettim (gerçek günlükleri göreceksiniz), ama gerçekten yapmak istediğim şey grep olmasıdır (her birini vi ile açmak zorunda kalmadan gerçekleştirmek arama). Bunu yapmamın bir yolu var mı?


76
2017-11-05 15:03


Menşei


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


Cevaplar:


Kullanabilirsiniz grep Dosyada arama yapmak için zaten - giriş dosyası gerçekten metin olup olmadığını gerçekten umurunda değil. 'Adam grep' den:

    -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.

Lütfen ikinci paragrafın sonunda dikkat kelimelerini işaretleyin. Sonuçları grep'ten yeni bir dosyaya yönlendirmek ve bunu vi / less ile incelemek isteyebilirsiniz.


85
2017-11-05 15:48



grep gerçekten çalışmıyor. Bir depolama cihazında grep'i deneyin. hafıza biter. Makul uzunluk çizgilerine bağlı olan kırık bir dahili tampon mekanizmasına sahiptir. - user239558


İçinden boru strings, sadece metin bırakarak tüm ikili kod dışarı şerit olacaktır.


41
2017-11-05 15:09



Harika bir fikir, teşekkürler :) [OP değil] - Karel Bílek
strings görünüşte anlamıyor utf-8 metin. - Javier


vermek bgrep bir deneme. (Orijinal yayın / daha yeni çatal)


6
2017-11-05 16:07



Bence buradaki en iyi cevap budur. Buradaki ikili aramaların kötü uygulamalarını görmek çok can sıkıcı. commandlinefu.com/commands/matching/grep-binary/... kaçan nerede \x gerçekten burada çalışmıyor grep -P "\x05\x00\xc0" mybinaryfile. - Léo Léopold Hertz 준영
koşarım bgrep "fafafafa" test_27.6.2015.bin |less ama al test_27.6.2015.bin: 00005ee4. Varsayalım fafafafaçünkü ben bunu araştırıyordum. Adamda manüel yok. Neden böyle bir çıktı? - Léo Léopold Hertz 준영
Burada bgrep'in işleyişi hakkında yeni bir konu açtım stackoverflow.com/q/31135561/54964 - Léo Léopold Hertz 준영
fark ne grep -a? - rubo77
Ne yazık ki, bash: bgrep: command not found... ve No package bgrep available. - jww


Bu üç komutu kullanabilirsiniz:

  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, solaris 10 kutumda çalışmıyor gibi görünüyor. Basit test: echo -e 'x \ ty' | tr '[\ 000- \ 011 \ 013- \ 037 \ 177- \ 377]' '.' sekmeyi çevirmez. - user55570


Grep 2.21 ile başlayarak, ikili dosyalar farklı davrandı:

İkili veri ararken, grep artık metin olmayan baytları satır olarak ele alabilir   sonlandırıcılar. Bu, performansı önemli ölçüde artırabilir.

Öyleyse şimdi ne oluyor, ikili verilerle, tüm metin olmayan baytlar (yeni satırlar dahil) satır sonlandırıcı olarak kabul edilir. Bunu değiştirmek isterseniz davranış, yapabilirsiniz:

  • kullanım --text. Bu sadece yeni hatların hat sonlandırıcılar olmasını sağlayacaktır

  • kullanım --null-data. Bu, yalnızca boş baytların satır sonlandırıcıları olmasını sağlayacaktır.


1
2017-07-18 00:19