2012-11-14 16 views
13

के साथ मैं एक रूसी लघु कहानी से एक शब्द सूची निकालने की कोशिश कर रहा हूं।tr [: ऊपरी:] [: निचला:] सिरिलिक पाठ

#!/bin/sh 

export LC_ALL=ru_RU.utf8 

sed -re 's/\s+/\n/g' | \ 
sed 's/[\.!,—()«»;:?]//g' | \ 
tr '[:upper:]' '[:lower:]' | \ 
sort | uniq 
हालांकि tr कदम सिरिलिक बड़े अक्षरों lowercasing नहीं है

। मैंने सोचा कि मैं पोर्टेबल चरित्र वर्गों का उपयोग कर चालाक था!

$ LC_ALL=ru_RU.utf8 echo "Г" | tr [:upper:] [:lower:] 
Г 

यदि यह प्रासंगिक है, तो मैंने क्रोम ब्राउज़र विंडो से कॉपी-पेस्टिंग द्वारा रूसी पाठ प्राप्त किया है। यह स्क्रीन पर सही दिखता है (एक पुटी टर्मिनल)। यह सिगविन के बैश खोल में है - इसे लिनक्स पर समान रूप से काम करना चाहिए (चाहिए!)।

एक पाइप में यूनिकोड टेक्स्ट को कम करने के लिए एक पोर्टेबल, विश्वसनीय तरीका क्या है?

+1

रूपांतरण:

मैं टिप्पणी में उल्लेख किया है, sed काम करने के लिए (GNU sed, कम से कम) लगता है' गूंज 'СТЭК' | sed's/[[: ऊपरी:]] */\ एल और/'' –

+1

' गूंज "जी" | tr [: ऊपरी:] [: निचला:] 'आउटपुट "г" ठीक से मैक ओएस एक्स 10.8 सिस्टम पर। – ulidtko

+0

धन्यवाद @LevLevitsky। यह मेरे लिए एक उपयुक्त फिक्स है (इसे उत्तर में प्रचारित करने के लिए स्वतंत्र महसूस करें)। मुझे आश्चर्य है कि क्यों tr काम नहीं करता है। – slim

उत्तर

9

यह है कि मैं क्या Wikipedia में पाया (किसी भी संदर्भ के बिना, हालांकि) है: GNU tr और क्लासिक यूनिक्स tr, सहित tr की

अधिकतर संस्करण, सिंगल-बाइट वर्ण पर काम करते हैं और यूनिकोड अनुरूप नहीं हैं। एक अपवाद Heirloom Toolchest कार्यान्वयन है, जो मूल यूनिकोड समर्थन प्रदान करता है।

इसके अलावा, this पुराना लेकिन संबंधित है। `Sed` मेरे लिए काम करता साथ

$ echo 'СТЭК' | sed 's/[[:upper:]]*/\L&/' 
стэк 
+3

हां, एकल-बाइट समस्या सत्य है। मैंने एक बार यह जीएनयू को एक बग के रूप में बताया और उन्होंने समझाया कि यह डिजाइन द्वारा ऐसा है (यानी उन्हें ठीक करने के लिए पुराने सॉफ्टवेयर के साथ संगतता तोड़नी होगी)। मैंने इसे मेलिंग सूची पर भी चर्चा की और इसी तरह [बताया गया था कि यह उस तरह से होना चाहिए] (http://lists.gnu.org/archive/html/bug-coreutils/2004-10/msg00063.html)। –

+2

यदि आप सभी घटनाओं को प्रतिस्थापित करना चाहते हैं, तो नियमित अभिव्यक्ति में जी ध्वज जोड़ना याद रखें। –

+0

जीएनयू sed 4.4 अब यह सही ढंग से नहीं करता है। :-( –

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