2012-11-28 15 views
19

मेरे पास एक बड़ी टेक्स्ट फ़ाइल है जिसमें कुछ यूनिकोड वर्ण हैं जो लाटेक्स क्रैश करते हैं। मैं गैर-ASCII वर्णों को एक फ़ाइल में sed के साथ कैसे ढूंढ सकता हूं, और लिनक्स बैश की तरह?बैश टूल के साथ गैर-ASCII वर्णों को कैसे खोजें?

grep -P '[^\x00-\x7f]' file 
+4

क्या यह बहुमत के साथ यूटीएफ -8 में एक फ़ाइल है अक्षर ASCII हैं, लेकिन कुछ अच्छी तरह से गठित बहु-बाइट यूटीएफ -8 हैं और कुछ टूटा हुआ है (बहु-बाइट) यूटीएफ -8? क्या कई अच्छी तरह से गठित (बहु-बाइट) यूटीएफ -8 वर्ण हैं? या यह पूरी तरह से कुछ अन्य एन्कोडिंग है? –

उत्तर

25

प्रयास करें:

nonascii() { LANG=C grep --color=always '[^ -~]\+'; } 

कौन सा की तरह इस्तेमाल किया जा सकता है:

printf 'ŨTF8\n' | nonascii 

[] भीतर ^ "नहीं" का अर्थ है

+0

वाह यह लाल लाल रंग में भी काम करता है। –

+0

क्या आप मुझे समझा सकते हैं कि '[^ - ~] \ +' का अर्थ क्या है?^लाइन afaik की शुरुआत है। –

+0

बहुत अच्छा है। लेकिन नियंत्रण वर्ण (न्यूलाइन को छोड़कर) पाए जाते हैं, हालांकि वे वास्तव में ASCII हैं। तो जब टैब होते हैं, कैरिज-रिटर्न (डॉस फाइलें), वे पाए जाते हैं। क्या आप एक विकल्प प्रदान कर सकते हैं जो केवल गैर-ASCII वर्णों को प्रिंट करता है? दूसरे उत्तर में '[^ \ x00- \ x7f]' दृष्टिकोण मेरे लिए भी काम नहीं करता है। – nealmcb

17

इस आदेश की कोशिश करो। तो [^ -~] का अर्थ अंतरिक्ष के बीच नहीं है और ~। तो नियंत्रण वर्णों को छोड़कर, यह गैर ASCII वर्णों से मेल खाता है, और यह अधिक पोर्टेबल है हालांकि नीचे [^\x00-\x7f] का थोड़ा कम सटीक संस्करण है। \+ का अर्थ है 1 or more और मल्टीबाई वर्णों को प्रत्येक बाइट में घुसने के बजाए पूरे चरित्र के चारों ओर एक रंग दिखाने के लिए मिलेगा, इस प्रकार मल्टीबाइट अनुक्रम को भ्रष्ट कर देगा

+2

@ जोनासस्टिन कृपया '-P' (- perl-regex) विकल्प जोड़ें। – kev

+6

नोट: '-P' विकल्प बीएसडी grep में काम नहीं करता है, जो ओएसएक्स – nacho4d

+0

@ nacho4d में भेजा गया है, इसके बजाय कोई क्या कर सकता है? –

संबंधित मुद्दे