बैश में रिक्त स्थान के बिना केवल हेक्स वर्णों वाली फ़ाइल का एक हेक्स डंप कैसे बनाएं?


188

मैं बश का उपयोग करके लिनक्स में एक द्विआधारी फ़ाइल के अनमॉडिफाइड हेक्स डंप कैसे बनाऊं ? odऔर hexdumpआदेशों डंप में दोनों डालने रिक्त स्थान है और इस आदर्श नहीं है।

वहाँ सभी हेक्स वर्ण, शून्य रिक्त स्थान या उत्पादन में newlines के साथ एक लंबी स्ट्रिंग लिखने का एक तरीका है?


जवाबों:


250

xxd -p file

या यदि आप एक ही लाइन पर यह सब चाहते हैं:

xxd -p file | tr -d '\n'


13
fyi इस प्रक्रिया को उलटने के लिए: xxd -r -ps hexascii.txt फ़ाइल (यह newlines के साथ या इसके बिना ठीक है)
कर्टिस येलोप

92

फ़ॉर्मेट स्ट्रिंग्स हेक्सडंप का व्यवहार वैसा ही कर सकते हैं जैसा आप चाहते हैं (कोई व्हॉट्सएप बिल्कुल नहीं, बाइट बाइट):

hexdump -ve '1/1 "%.2x"'

1/1का अर्थ है "प्रत्येक प्रारूप को एक बार लागू किया जाता है और एक बाइट लेता है", और "%.2x"प्रिंटफ़ की तरह वास्तविक प्रारूप स्ट्रिंग है। इस मामले में: 2-वर्ण हेक्साडेसिमल संख्या, अग्रणी शून्य यदि छोटा है।


7
आपको एक की जरूरत है -vया यह दोहराया बाइट्स को छोड़ देगा और उन्हें एक तारांकन के साथ बदल देगा।
अगली सूचना तक रोक दिया गया।

2
मुझे आश्चर्य है कि अगर हेक्सडम्प स्वयं न्यूलाइन (केवल) को आउटपुट के अंत में सक्षम करने में सक्षम है .. (स्पष्ट उपांग ; echoको बैश उपनाम के रूप में उपयोग करना असंभव बनाता है)
mykhal

2
मेरा उपनाम:alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
devstuff

पुनरावृति गणना और बाइट एक के लिए डिफ़ॉल्ट रूप से गिना जाता है, इसलिए 1/1 छोड़ा जा सकता है,hexdump -ve '"%.2x"'
एलेक्स चे

@mykhal, यह संभव है, यदि आप आउटपुट में बाइट्स की संख्या जानते हैं। यदि आप केवल 13 पहले बाइट्स आउटपुट के लिए हेक्सडंप का उपयोग करते हैं, तो कहें:hexdump -n 13 -e '13/1 "%.2x" "\n"'
एलेक्स चे

24

यह संस्करण के विवरण पर निर्भर करता है od। OSX पर, इसका उपयोग करें:

od -t x1 -An file |tr -d '\n '

(यह बिना किसी पते के हेक्स बाइट्स के रूप में प्रिंट होता है। और व्हाट्सएप को बाद में डिलीट कर दिया जाता है।)


1
मैं -vइस संदर्भ में भी जोड़ूंगा, अन्यथा यह दोहराता है *
सिरो सेंटिल्ली 24 iro iro i 法轮功 '

10

पर्ल वन-लाइनर:

perl -e 'local $/; print unpack "H*", <>' file

सत्यापित। "Xxd -p फ़ाइल | tr -d '\ n'" से मेल खाता है।
कर्टिस येलोप

1
fyi प्रक्रिया को उलटने के लिए: perl -e 'local $ /; प्रिंट पैक "H *", <> '<hexascii.txt> फ़ाइल
Curtis

"स्थानीय $ /" अनावश्यक है।
कर्टिस येलोप

अंतिम टिप्पणी के लिए अपडेट करें: "पैक" के लिए "स्थानीय $ /" अनावश्यक है। अनपैक के लिए, आपको इसकी आवश्यकता है लेकिन वैकल्पिक रूप से "अपरिभाषित $ /" रख सकते हैं। $ / लाइन विभाजक है (डिफ़ॉल्ट NL)। अपरिभाषित इसे स्लप-मोड में डालता है। तो <> एक स्ट्रिंग संदर्भ में संदर्भित पूरी बाइनरी फ़ाइल को लाइनों में पार्स किए बिना खींचती है।
कर्टिस येलोप

वैकल्पिक रूप: perl -e 'Print unpack "H *", join (("", <>)' 'फ़ाइल
कर्टिस यलोप

2

अन्य उत्तर बेहतर हैं, लेकिन एक शुद्ध बैश समाधान के लिए, मैंने अपने उत्तर में स्क्रिप्ट को संशोधित किया है जो एक फ़ाइल की सामग्री का प्रतिनिधित्व करने वाले हेक्स पात्रों की एक सतत स्ट्रीम को आउटपुट करने में सक्षम हो। (इसका सामान्य मोड अनुकरण करना है hexdump -C।)

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