बाइनरी फ़ाइलों को grep करने के लिए समतुल्य कमांड


24

मेरे पास बायनेरिज़ का एक गुच्छा है और मुझे पता है कि इन बायनेरिज़ के अंदर वे तार हैं जिन्हें मैं खोजना चाहता हूं।

मैं एक करना चाहते हैं:

grep -lir "the string I am looking for"

और एक विशेष निर्देशिका के अंदर सभी बायनेरिज़ की एक सूची प्राप्त करें जिसमें वह स्ट्रिंग शामिल है लेकिन grep -lirस्पष्ट रूप से इन फ़ाइलों के साथ काम नहीं कर रहा है।

क्या कोई कमांड है जो टर्मिनल से इस तरह की खोज कर सकता है?

जवाबों:


24

GNU grep के साथ , आप इसका उपयोग कर सकते हैं - यह विकल्प बाइनरी फ़ाइलों को पाठ फ़ाइलों के रूप में मानता है:

grep -ali -- string file

यदि आपका grep संस्करण समर्थन नहीं करता है -a, तो आप इसके बजाय ack का उपयोग कर सकते हैं । 1.x के साथ, आपको -aविकल्प में शामिल करने की आवश्यकता है , ack 2.x के साथ, आप नहीं करते हैं, क्योंकि खोज के दौरान गैर-पाठ फ़ाइल को डिफ़ॉल्ट रूप से शामिल करना (केवल तब ही गैर-पाठ फ़ाइल को अनदेखा कर दिया जाता है जब आपने कोई फ़ाइल निर्दिष्ट नहीं की थी)।


क्या मैं ackस्वयं का वर्णन गलत कर रहा हूँ ? (मैनुअल में) "ack 2.x हर नियमित, गैर-बाइनरी फ़ाइल के माध्यम से खोजेगा, जिसे [blah blah] द्वारा स्पष्ट रूप से नजरअंदाज नहीं किया गया है" तो यह लगता है कि ack 2.x को अभी भी एक फाइल को पढ़ना बंद कर देना चाहिए यदि सामग्री दिखती है द्विआधारी।
पीटर कॉर्ड्स

1
@PeterCordes: यह माना जाता है कि जब कोई फ़ाइल चयनित नहीं थी। कोशिश करो ack grep /bin/grepऔर आपको परिणाम मिलेगा। मैंने भ्रमित होने से रोकने के लिए अपना उत्तर अपडेट किया।
congonglm

1
अपने बाइनरी से स्ट्रिंग्स प्राप्त करने के लिए स्ट्रिंग्स कमांड का उपयोग करने का प्रयास करें।
उवे बर्गर

23

कमांड stringsएक फ़ाइल से सभी एएससीआई डेटा को निकालेगा, यदि आप grepइसके आउटपुट, तो आप अपने डेटा की खोज कर सकते हैं:

strings <filename> | grep "search text"

यह स्वीकृत उत्तर होना चाहिए। यह बाइनरी इस कार्य के लिए अच्छा है।
व्लादिस्लाव डोभालगल्स

5
@xeon: यह हमेशा उपयोग करने के लिए अच्छा नहीं है strings, अधिक विवरण के लिए यहां पढ़ें ।
कॉउन्ग्लम

1
चूंकि लक्ष्य यह निर्धारित करना है कि किन बायनेरिज़ में स्ट्रिंग है, strings -fअधिक उपयुक्त होगा।
jamesdlin

यह एक बेहतर जवाब है।
Xofo

9

आपका प्रश्न द्विआधारी फ़ाइलों को खोजने के बारे में है जिसमें एक पैटर्न होता है (और हमारे पास पहले से ही बहुत अच्छे उत्तर हैं!)। पूरक हम घटनाओं को प्राप्त करना पसंद कर सकते हैं।

मैं अक्सर उपयोग करता हूं

grep -aPo '.{0,20}pattern.{0,20}'  binfile

20-चार के आसपास के संदर्भ प्राप्त करने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.