(grep) Regex गैर-ASCII वर्णों से मेल खाने के लिए?




unicode (5)

लिनक्स पर, मेरे पास बहुत सारी फाइलें हैं। उनमें से कुछ में गैर-ASCII वर्ण हैं, लेकिन वे सभी वैध UTF-8 । एक कार्यक्रम में एक बग है जो इसे गैर-ASCII फ़ाइल नामों के साथ काम करने से रोकता है, और मुझे यह पता लगाना होगा कि कितने प्रभावित हैं। मैं इसे find साथ ऐसा करने जा रहा था और फिर गैर-ASCII वर्णों को मुद्रित करने के लिए एक grep करता हूं, और फिर संख्या खोजने के लिए wc -l करें। यह grep होना जरूरी नहीं है; मैं किसी भी मानक यूनिक्स नियमित अभिव्यक्ति का उपयोग कर सकता हूं, जैसे Perl , sed , AWK , आदि।

हालांकि, क्या किसी भी चरित्र के लिए नियमित अभिव्यक्ति है जो एएससीआईआई चरित्र नहीं है?



आप इस रेगेक्स का उपयोग कर सकते हैं:

[^\w \xC0-\xFF]

केस पूछता है, विकल्प मल्टीलाइन है


नहीं, [^\x20-\x7E] ASCII नहीं है।

यह वास्तविक ASCII है:

 [^\x00-\x7F]

अन्यथा, यह नई लाइनों और अन्य विशेष पात्रों को ट्रिम कर देगा जो ASCII तालिका का हिस्सा हैं!


यह एक गैर-ASCII चरित्र से मेल खाएगा:

[^\x00-\x7F]

यह एक वैध PCRE ( पर्ल-संगत नियमित अभिव्यक्ति ) है।

आप POSIX शॉर्टैंड्स का भी उपयोग कर सकते हैं:

  • [[:ascii:]] - एक एकल ASCII चार से मेल खाता है
  • [^[:ascii:]] - एक गैर-ASCII char से मेल खाता है

[^[:print:]] शायद आपके लिए पर्याप्त होगा। **


[^\x00-\x7F] और [^[:ascii:]] कुछ नियंत्रण बाइट्स को याद करते हैं तो strings कभी-कभी बेहतर विकल्प हो सकती हैं। उदाहरण के लिए cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g' cat test.torrent | perl -pe 's/[^[:ascii:]]+/\n/g' आपके टर्मिनल पर विषम चीजें करेगा, जहां strings test.torrent व्यवहार करेगा।







ascii