2011-12-19 11 views
37

मैं टर्मिनल पर टेक्स्ट फ़ाइलों के समूह से यूनिकोड वर्ण कैसे हटा सकता हूं? मैं इस की कोशिश की है, लेकिन यह काम नहीं किया:टेक्स्टफाइल से यूनिकोड वर्ण हटाएं - sed, अन्य bash/shell विधियों

iconv -f utf8 -t ascii//TRANSLIT </tmp/utf8_input.txt> /tmp/ascii_output.txt 

यह वर्ण अनुवाद करेगा:

sed 'g/\u'U+200E'//' -i *.txt 

मैं textfiles से इन unicodes दूर करने के लिए

U+0091 - sort of weird "control" space 
U+0092 - same sort of weird "control" space 
A0 - non-space break 
U+200E - left to right mark 
+0

में अपने पाठ फ़ाइलें क्या एन्कोडिंग है? – unwind

उत्तर

37

के स्पष्ट सभी गैर-ascii वर्ण आप केवल विशेष वर्ण निकालना चाहते हैं और आप अजगर है, तो आप कर सकते हैं:

CHARS=$(python -c 'print u"\u0091\u0092\u00a0\u200E".encode("utf8")') 
sed 's/['"$CHARS"']//g' </tmp/utf8_input.txt> /tmp/ascii_output.txt 
+0

शायद सबसे सुंदर नहीं है। लेकिन यह मेरे लिए बहुत अच्छा काम किया। चार्स वैरिएबल का निर्माण करके, इसे sed को पढ़ने में आसान बना दिया गया, और CHARS चर को आसानी से बनाए रखा जा सकता है। चोरोबा का जवाब भी काम करता है, इसलिए मुझे लगता है कि यह स्वाद का विषय है (और यदि आपके पास पाइथन आसान है)। – Paulb

+1

यह पाइथन भाग का एक वैकल्पिक कोड है।'python -c 'print "" .join (नक्शा (unichr, रेंज (0x80, 0xa0) + रेंज (0x2000, 0x200f))। एन्कोड ("utf-8")' हाल ही में लिनक्स ओएस में –

+1

आप संख्यात्मक कोड और के बाद Ctrl + Shift + u दबाकर यूनिकोड वर्ण लिख सकते हैं, उदाहरण के लिए 'Ctrl + Shift + u 0019 ⏎' – smoebody

12

उपयोग iconv की जरूरत "एस" में "एस" की तरह (सबसे समान दिखने वाले)।

+1

वे एएससीआई नहीं हैं, मैं उन्हें utf8 में रखना चाहता हूं लेकिन मैं इन अजीब रिक्त स्थान को सामान्य नल स्ट्रिंग में बदलना चाहता हूं '" " – alvas

+0

मेरा दूसरा उत्तर देखें –

+0

ओपी क्या चाहता था, लेकिन मुझे एक यूनिकोड को बदलने की आवश्यकता नहीं थी लाइन-सेपरेटर (u2028) एक नई लाइन में। मैं iconv का उपयोग करना पसंद करता, लेकिन मैं यह नहीं समझ पाया कि इसे कैसे किया जाए। क्या उधर रास्ता है? –

49

file.txt

$ iconv -c -f utf-8 -t ascii file.txt 
$ strings file.txt 
+0

मैं यूनिकोड एन्कोडिंग रखना चाहता हूं। क्षमा करें, इसलिए iconv समाधान नहीं है। – alvas

+2

आप इसे रिवर्स में क्यों नहीं चला सकते? tempf = $ (mktemp) iconv -c -f utf-8 -t ascii file.txt> $ tempf iconv -f ascii -t utf-8 $ tempf> file.txt –

+1

यूटीएफ -8 एक वैध सबसेट है ASCII। रिवर्स ट्रांसफॉर्मेशन फ़ाइल को अपरिवर्तित रखता है। –

21

यूनिकोड की UTF-8 एन्कोडिंग के लिए, आप sed के लिए इस नियमित अभिव्यक्ति का उपयोग कर सकते हैं:

sed 's/\xc2\x91\|\xc2\x92\|\xc2\xa0\|\xe2\x80\x8e//' 
+2

मैं 'यू + ...' से '\ xc2 \ ... 'से मैपिंग कैसे प्राप्त करूं? – alvas

+18

'echo -ne' \ u0091 '| xxd' – kev

+1

यह एक अच्छी शुरुआत हो सकती है - http://www.utf8-chartable.de/ –

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