/ / डेटाबेस से केवल मिलान किए गए हेक्साडेसिमल चार्ट को खींचने के लिए egrep का उपयोग करने की कोशिश करना - बैश, sed, pcre, grep

डेटाबेस से केवल मिलान किए गए हेक्साडेसिमल वर्णों को खींचने के लिए egrep का उपयोग करने का प्रयास करना - बैश, sed, pcre, grep

हेक्स वर्ण के रूप में हैं <9F>। उनके आस-पास बहुत सारे डेटा हैं, लेकिन मुझे केवल regex प्राप्त करने में दिलचस्पी है, इसलिए मैं इनको एक तालिका से निकाल सकता हूं sed और फिर डेटाबेस को फिर से आयात करें।

यहां तक ​​कि मैंने अभी तक कोशिश की है:

egrep -io "<[0-9A-Fa-f]{2}>" /root/database.sql

और कई बदलाव। मुझे लगता है कि यह काम करने के लिए नहीं मिल सकता है, और मुझे यकीन नहीं है कि क्यों। मैंने "डबल / ट्रिपल भागने और समूहीकरण करने की कोशिश की। यह चरित्र जोड़ी को ढूंढता है, लेकिन" नहीं "ढूंढता है < >"रों

तो यह इस तरह से उत्पादन देता है:

39
48
69
6F
B9

लेकिन मुझे इसे पूरा करने की आवश्यकता है

<39>
<48>
<69>
<6F>
<B9>

उत्तर:

उत्तर № 1 के लिए 1

मैं शर्त लगाता हूं कि ये उस बाइट्स हैं जिस सीमा के बाहर आपका टर्मिनल प्रदर्शित कर सकता है (या तो नियंत्रण वर्ण या मल्टीबाइट स्ट्रिंग्स)।

पहले मुझे पूछना होगा कि क्या आप बिल्कुल निश्चित हैंआप इसे डेटा एब्स से साफ़ करना चाहते हैं (आखिरकार किसी ने रैली को "über" या कुछ और शब्द के साथ रिकॉर्ड डालना चाहा होगा)। इसके अलावा, मैंने देखा है कि कुछ डेटाबेस डीबी फ़ाइलों में विभाजकों के रूप में नियंत्रण वर्णों का उपयोग करते हैं, साथ ही (इंग्रिड्स का ध्यान आता है)

यदि आप अभी भी डेटा खंगालना चाहते हैं तो शायद यह कोशिश करें:

perl -npe "tr / 01-177 / cd"

मैं इसे टैबलेट पर टाइप कर रहा हूं इसलिए मैं डबल चेक कर सकता हूं, लेकिन यह 7-बिट एएससीआईआई रेंज के बाहर किसी भी वर्ण को हटा देना चाहिए।


जवाब के लिए 0 № 2

यह मेरे लिए काम करता है:

$cat testfile
<39> <48>
<60><6F><a4>

$egrep -io "<[0-9A-Fa-f]{2}>" testfile

<39>
<48>
<60>
<6F>
<a4>

जवाब के लिए 0 № 3

संकेतों की तुलना में कम और अधिक से बचने से शब्द की शुरुआत और शब्द सीमाओं के अंत के लिए मैच दिखता है। यदि आप उन शाब्दिक वर्णों का मिलान करना चाहते हैं तो उनका उपयोग न करें।

इसके अलावा, आप एक चरित्र वर्ग का उपयोग करके अपने regex को सरल बना सकते हैं।

grep -E "<[[:xdigit:]]{2}>"

यह संभव है कि आपके पास अन्य गैर-मुद्रण वर्ण हैं जो मेल नहीं खा रहे हैं। जैसा कि आदम ने सुझाव दिया, उपयोग करें od या hexdump यह देखने के लिए कि और क्या छिपाया जा सकता है। बाइनरी फ़ाइलों को कभी-कभी आउटपुट का उपयोग करने के लिए प्रस्तुत किया जाता है, उदा। <EF> उन पात्रों के बिना वास्तव में वहाँ जा रहा है। क्या है वहाँ एक बाइट मान होगा 0xEF। बाइनरी डेटा जैसे कि "टी के साथ अच्छी तरह से जीता sed या grep.