grep "बाइनरी फ़ाइल (मानक इनपुट) से मेल खाता है" जब फ़ाइल में एक स्ट्रिंग पैटर्न खोजने की कोशिश कर रहा है


70

मैं उबंटू में हूं और मैंने टाइप किया cat .bash_history | grep gitऔर यह वापस आ गया

बाइनरी फ़ाइल (मानक इनपुट) मेल खाती है

मेरा bash_historyअस्तित्व है और इसमें कई रेखाएँ हैं जो इसके साथ शुरू होती हैं git

इस त्रुटि को प्रदर्शित करने के कारण क्या हुआ और मैं इसे कैसे ठीक कर सकता हूं?


file .bash_history( file ~/.bash_history) का उत्पादन क्या है ?
हेमायल

आउटपुट है.bash_history: data
उत्तरशीर्ष

किसी कारण से यह सिर्फ मेरे अपाचे लॉग के साथ हो रहा था।
billynoah

बहुत निकटता से संबंधित: unix.stackexchange.com/q/19907/5510
ट्रेवर बॉयड स्मिथ

जवाबों:


11

संभवतः फ़ाइल .bash_historyगैर-पाठ डेटा के साथ शुरू होती है, इसलिए grepफ़ाइल को द्विआधारी के रूप में मान रही है। यह file .bash_historyआउटपुट द्वारा पुष्टि की गई है :

.bash_history: data 

आप एक संक्षिप्त दृश्य के लिए शुरुआत से कुछ बाइट्स पढ़ सकते हैं:

head -c1K .bash_history 

यहाँ मैं पहले 1 KiB पढ़ रहा हूँ।

आप STDOUT को hexdump/ odया इसके समान पाइप कर सकते हैं ।


एक साइड नोट के grepरूप में, तर्क के रूप में फाइलनाम (एस) लेता है, इसलिए catयहां बेकार है; बस करो:

grep git .bash_history

मुझे अभी भी यकीन नहीं है कि grep समस्या को कैसे हल किया जाए, head -c1k .bash_historyमेरी .bash_history फ़ाइल की पहली 38 पंक्तियाँ पढ़ें। सब कुछ पठनीय था
उत्तरशीर्ष

2
@TatakaiWasumi का आउटपुट क्या है grep -a git .bash_history?
हेमायल

1
वह काम किया! मुझे वह सब कुछ मिला जो मैं इससे चाहता था। क्या करता -aहै?
जवाबसेकर

6
@TatakaiWasumi -aबनाता grepद्विआधारी के रूप में फ़ाइल के इलाज के लिए।
हेमायल

3
-agrepएक द्विआधारी फ़ाइल बनाने की प्रक्रिया करें जैसे कि यह पाठ था।
लश्गर

127

आप उपयोग कर सकते हैं grep -a 'pattern'

से आदमी ग्रेप पेज:

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

इसने मुझे -zकई पंक्तियों में मिलान करने के लिए ध्वज का उपयोग करते समय मदद की है ।
स्ट्रैगो

इस प्रश्न के लिए यह उत्तर सबसे अच्छा होना चाहिए।
माइकल पाचेको

हाँ यह उत्तर अधिक उपयुक्त है!
दयावल्कर

3

मैंने आज इस प्रश्न को देखा है, क्योंकि मुझे वही समस्या थी जब मैं अपना मन बहलाना चाहता था .bash_history। (लिटिल नोट: मैंने अपना इतिहास बदल दिया, ताकि एक नया निर्माण किया गया। इस नए इतिहास को एक द्विआधारी के रूप में नहीं माना गया)

@Heemayls उत्तर में यह कहा गया है, कि grepफ़ाइल नाम लेता है और catबेकार होगा। यह पूरी तरह से सच नहीं है। से grepरों आदमी पेज:

यदि कोई फ़ाइल निर्दिष्ट नहीं है, या यदि फ़ाइल "-" दी गई है, तो grep मानक इनपुट खोजता है।

इसलिए आप इसका उपयोग कर सकते हैं catऔर इसे पाइप कर सकते हैं grep। हालाँकि यह उस समस्या को हल नहीं करता है जिसे .bash_historyएक बाइनरी के रूप में माना जाता है। केवल सही चीज का उपयोग करना है grep -a(जैसे कि @AK_ से उत्तर में) कि क्या आप grepसीधे या साथ में इतिहास catऔर एक पाइप।


cat .bash_history | grep -a git

या

grep -a git .bash_history


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