grep: उन सभी लाइनों का पता लगाएं, जिनमें जापानी कंजियां हैं


14

एक विशाल यूटीएफ -8 टेक्स्ट फ़ाइल में, मैं उन सभी लाइनों को दिखाना चाहता हूं जिनमें जापानी कंजरी शामिल हैं
क्या grep(या अन्य) अभिव्यक्ति यह करती है?

अगर मैं गलत नहीं हूँ, तो कांजी पात्र \u4e00और के बीच के हैं \u4dbf

मुझे काना दिखाने की जरूरत नहीं है , लेकिन उन्हें दिखाना भी बड़ी समस्या नहीं होगी।

जवाबों:


12

जापानी (उदाहरण के लिए, एक चीनी या कोरियाई संस्करण) में उपयोग नहीं की जाने वाली हान विचारधारा से जापानी कांजी के अलावा यह बताना असंभव है (एक विशाल तालिका का उपयोग किए बिना)।

यदि आप मूल रेंज (\ u4e00 to \ u9fff) में किसी भी हान विचारधारा का पता लगाना चाहते हैं, तो वे 3 बाइट्स में एन्कोडेड होते हैं, पहला बाइट हमेशा 0xe4 और 0xe9 के बीच, दूसरा और तीसरा बाइट्स 0x80 और 0xbf के बीच होता है।

यहाँ दो कठिनाइयाँ हैं, पहले आपको grep बताना होगा जिसे आप बाइट्स के बाद देखना चाहते हैं और वर्णों को नहीं; फिर आपको उन्हें regexp एक्सप्रेशन में डालने के लिए 0xe4, 0xe9, 0x80 और 0xbf बाइट टाइप करना होगा।

मुझे पता चला -२ स्विच दोनों करता है; और जो लाइन आप चाहते हैं वह है:

grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]"

और यदि आप काना चाहते हैं:

grep -P "[\xe4-\xe9][\x80-\xbf][\x80-\xbf]|\xe3[\x81-\x83][\x80-\xbf]"

यह महान काम करता है!
निकोलस राउल

4

यहाँ पाँचवीं तालिका के अनुसार , कांजी नक्काशीदार \u4e00और बीच के हैं\u9fff

मेरा कार्यान्वयन grepयूनिकोड वर्णों को संभालने में सक्षम प्रतीत नहीं होता (जो कि आर्कलिनक्स पर GNU grep 2.14 है), लेकिन हम अभी भी उपयोग कर सकते हैं \x। आप संबंधित कोड यहां पा सकते हैं या hexeditउन्हें प्राप्त करने के लिए एक उपकरण का उपयोग कर सकते हैं।

ब्याज की हमारी सीमा में किसी भी चीज के लिए e9 be a5"अमान्य कोलाजेशन कैरेक्टर" वापस आ गया है, इसलिए यह वही है जो मैं लेकर आया हूं:

grep "["$'\xe4\xb8\x80'"-"$'\xe9\xbe\xa5'"]" file.txt

+1 यह भी काम करता है, लेकिन पाब्लो थोड़ा तेज था ...
निकोलस राउल

3
के बराबर है grep "[一-龥]"। समस्या यह है कि यह स्थानीय-निर्भर है, और कॉलेशन नियमों का उपयोग करता है; अर्थात्, केवल वे तत्व जिनके लिए एक छँटाई क्रम परिभाषित किया गया है, का उपयोग सीमा या मिलान में किया जा सकता है। -Pस्विच सिर्फ स्थान पर हो द्विआधारी मिलान करता है,। एक स्थानीय-आधारित दृष्टिकोण "वर्ण श्रेणी" की एक सांस्कृतिक परिभाषा का उपयोग करेगा, एक द्विआधारी-आधारित दृष्टिकोण "श्रेणी" की एन्कोडिंग मान परिभाषा का उपयोग करेगा। विशेष रूप से अल्फाबेटिक स्क्रिप्ट के लिए आउटपुट काफी अलग है। (यहाँ हान विचारधारा के लिए यह लगभग बराबर है)
पाब्लो सारातागागा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.