Vraag Hoe grijp ik door binaire bestanden die op tekst lijken?


Ik heb binaire bestanden die tekst zouden moeten zijn (het zijn geëxporteerde logs), maar ik kan het niet openen met minder (het ziet er lelijk uit - het ziet eruit als een binair bestand). Ik ontdekte dat ik het kon openen met vi en ik kan het katten (je zult de eigenlijke logs zien), maar wat ik echt zou willen doen, is er doorheen grepen (zonder elke met vi te openen en dan te spelen een zoekopdracht). Is er een manier voor mij om dat te doen?


76
2017-11-05 15:03


oorsprong


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


antwoorden:


Je kunt gebruiken grep hoe dan ook om door het bestand te zoeken - het maakt niet echt uit of het invoerbestand echt tekst is of niet. Van '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.

Markeer de woorden van waarschuwing aan het einde van de tweede alinea. U kunt de resultaten van grep omleiden naar een nieuw bestand en dit met vi / minder onderzoeken.


85
2017-11-05 15:48



grep werkt niet echt. probeer grep op een opslagapparaat. het heeft onvoldoende geheugen. het heeft een gebroken intern buffermechanisme dat afhangt van redelijke lengtelijnen. - user239558


Leid het door strings, die alle binaire code zal verwijderen en alleen de tekst zal achterlaten.


41
2017-11-05 15:09



Geweldig idee, bedankt :) [niet op] - Karel Bílek
strings begrijpt ogenschijnlijk niet dat utf-8 tekst is. - Javier


Geven bgrep een poging. (originele release / meer recente vork)


6
2017-11-05 16:07



Ik denk dat dit het beste antwoord is hier. Het is zo vervelend om slechte implementaties van binaire zoekopdrachten zoals hier te zien commandlinefu.com/commands/matching/grep-binary/... waar de ontsnapping door \x werkt niet echt zoals hier grep -P "\x05\x00\xc0" mybinaryfile. - Léo Léopold Hertz 준영
ik ren bgrep "fafafafa" test_27.6.2015.bin |less maar krijg test_27.6.2015.bin: 00005ee4. Ik ga ervan uit dat ik krijg fafafafa, omdat ik dit zocht. Geen handleiding bij de mens. Enig idee waarom zo'n output? - Léo Léopold Hertz 준영
Ik heb hier een nieuwe thread geopend over het functioneren van bgrep stackoverflow.com/q/31135561/54964 - Léo Léopold Hertz 준영
wat is het verschil met grep -a? - rubo77
Helaas, bash: bgrep: command not found... en No package bgrep available. - jww


U kunt deze drie opdrachten gebruiken:

  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



het tr lijkt niet te werken op mijn solaris 10-box. Eenvoudige test: echo -e 'x \ ty' | tr '[\ 000- \ 011 \ 013- \ 037 \ 177- \ 377]' '.' vertaalt het tabblad niet. - user55570


Vanaf Grep 2.21 zijn binaire bestanden dat anders behandeld:

Bij het zoeken naar binaire gegevens, kan grep nu niet-tekstbytes als regel behandelen   terminators. Dit kan de prestaties aanzienlijk verbeteren.

Wat er nu gebeurt, is dat met binaire gegevens, alle niet-tekstbytes (inclusief nieuwe regels) worden behandeld als terminators. Als je dit wilt wijzigen gedrag, kunt u:

  • gebruik --text. Dit zorgt ervoor dat alleen newlines regelafsluitingen zijn

  • gebruik --null-data. Dit zorgt ervoor dat alleen nul bytes regelafsluitingen zijn


1
2017-07-18 00:19