सवाल मैं टेक्स्ट की तरह दिखने वाली बाइनरी फ़ाइलों के माध्यम से कैसे grep?


मेरे पास बाइनरी फाइलें हैं जो टेक्स्ट होना चाहिए (वे लॉग निर्यात कर रहे हैं), लेकिन मैं इसे कम से कम नहीं खोल सकता (यह बदसूरत लग रहा है - यह एक बाइनरी फ़ाइल की तरह दिखता है)। मैंने पाया कि मैं इसे vi के साथ खोल सकता हूं और मैं इसे बिल्ली कर सकता हूं (आपको वास्तविक लॉग दिखाई देंगे), लेकिन मैं वास्तव में क्या करना चाहता हूं, उनके माध्यम से grep है (बिना प्रत्येक को vi के साथ खोलना और फिर प्रदर्शन करना एक खोज)। क्या ऐसा करने का मेरे लिए कोई रास्ता है?


76
2017-11-05 15:03


मूल


serverfault.com/questions/51477/... - quanta
क्या आप ने कोशिश की grep -a? - quanta
stackoverflow.com/questions/9988379/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


जवाब:


आप उपयोग कर सकते हैं grep वैसे भी फ़ाइल के माध्यम से खोजने के लिए - यह वास्तव में परवाह नहीं करता है कि इनपुट फ़ाइल वास्तव में पाठ है या नहीं। 'मैन 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.

कृपया दूसरे पैराग्राफ के अंत में सावधानी के शब्दों को चिह्नित करें। आप grep से परिणामों को एक नई फ़ाइल में रीडायरेक्ट करना चाहते हैं और vi / less के साथ इसकी जांच कर सकते हैं।


85
2017-11-05 15:48



grep वास्तव में काम नहीं करता है। एक भंडारण डिवाइस पर grep कोशिश करें। यह स्मृति से बाहर हो जाएगा। इसमें एक आंतरिक बफरिंग तंत्र टूट गया है जो उचित लंबाई रेखाओं पर निर्भर करता है। - user239558


इसे पाइप करें strings, जो केवल पाठ छोड़कर सभी बाइनरी कोड को हटा देगा।


41
2017-11-05 15:09



महान विचार, धन्यवाद :) [ओपी नहीं] - Karel Bílek
strings स्पष्ट रूप से समझ में नहीं आता utf-8 पाठ है। - Javier


देना bgrep एक कोशिश। (मूल रिलीज / हाल ही में कांटा)


6
2017-11-05 16:07



मुझे लगता है कि यह सबसे अच्छा जवाब है। यहां जैसे बाइनरी खोज के खराब कार्यान्वयन को देखना बहुत परेशान है commandlinefu.com/commands/matching/grep-binary/... जहां से भाग रहा है \x वास्तव में यहाँ काम नहीं करता है grep -P "\x05\x00\xc0" mybinaryfile। - Léo Léopold Hertz 준영
मै भागा bgrep "fafafafa" test_27.6.2015.bin |less लेकिन मिलता है test_27.6.2015.bin: 00005ee4। मुझे लगता है कि मिल जाएगा fafafafa, क्योंकि मैं इसे खोज रहा था। आदमी में कोई मैनुअल नहीं कोई विचार क्यों ऐसा आउटपुट? - Léo Léopold Hertz 준영
मैंने यहां bgrep के कामकाज के बारे में एक नया धागा खोला stackoverflow.com/q/31135561/54964 - Léo Léopold Hertz 준영
क्या अंतर है grep -a? - rubo77
दुर्भाग्य से, bash: bgrep: command not found... तथा No package bgrep available। - jww


आप इन तीन आदेशों का उपयोग कर सकते हैं:

  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



टी मेरे सौरलिस 10 बॉक्स पर काम नहीं कर रहा है। सरल परीक्षण: echo -e 'x \ ty' | tr '[\ 000- \ 011 \ 013- \ 037 \ 177- \ 377]' '।' टैब का अनुवाद नहीं करता है। - user55570


Grep 2.21 से शुरू, बाइनरी फाइलें हैं अलग से इलाज किया:

बाइनरी डेटा खोजते समय, grep अब लाइन के रूप में गैर-पाठ बाइट्स का इलाज कर सकता है   टर्मिनेटर्स। यह प्रदर्शन को काफी हद तक बढ़ा सकता है।

तो अब क्या होता है कि बाइनरी डेटा के साथ, सभी गैर-पाठ बाइट्स (न्यूलाइन समेत) को लाइन टर्मिनेटर के रूप में माना जाता है। अगर आप इसे बदलना चाहते हैं व्यवहार, आप कर सकते हैं:

  • उपयोग --text। यह सुनिश्चित करेगा कि केवल न्यूलाइन लाइन टर्मिनेटर हैं

  • उपयोग --null-data। यह सुनिश्चित करेगा कि केवल शून्य बाइट लाइन टर्मिनेटर हैं


1
2017-07-18 00:19