2008-09-15 14 views
15

जीएनयू sed संस्करण 4.1.5 अंतरराष्ट्रीय वर्णों के साथ असफल प्रतीत होता है। यहाँ मेरी इनपुट फ़ाइल है:अंतरराष्ट्रीय पात्रों और कैसे ठीक करने के लिए sed विफल रहता है?

ग्रास ओच Stenar ट्राड - मेरा से मिनीपोलिस डीवीडी [G2007DVD] को 7812 | एक्स
ग्रास ओच Stenar ट्राड - मेरा से मिनियापोलिस के लिए डीवीडी [G2007DVD] 7812 | वाई

(ध्यान दें दूसरी पंक्ति में यूमलॉट।)

और जब मैं

एसईडी के /.* करना | // '

में <

मैं केवल एक्स और वाई को देखने के लिए, जैसा कि मैंने अप करने के लिए सभी वर्ण को दूर करने के लिए कहा है उम्मीद करेंगे' | ' और इससे परे अंतरिक्ष। इसके बजाय, मुझे मिलता है:

एक्स
ग्रास ओच स्टेनर ट्रे - एम से? वाई

मुझे पता है कि मैं अंतरराष्ट्रीय वर्णों को हटाने के लिए tr का उपयोग कर सकता हूं। सबसे पहले, लेकिन क्या सिर्फ sed का उपयोग करने का कोई तरीका है?

+0

यह समस्या प्रतीत होती है कि जीएनयू sed (संस्करण 4.2.2 पर परीक्षण) के साथ हल किया गया है। – sorontar

उत्तर

24

मुझे लगता है कि त्रुटि तब होती है, तो फ़ाइल के इनपुट एनकोडिंग अपने वातावरण की प्राथमिकता की इनकोडिंग से अलग है।

उदाहरण: in UTF-8

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in 
X 
Y 
$ LANG=de_DE.iso88591 sed 's/.*| //' < in 
X 
Y 

UTF-8 सुरक्षित रूप से ISO-8859-1 के रूप में व्याख्या की जा सकती है, तो आप अजीब पात्रों मिल जाएगा लेकिन अलग है कि सब कुछ से ठीक है।

उदाहरण: in आईएसओ-8859-1

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in 
X 
Gras Och Stenar Trad - From MöY 
$ LANG=de_DE.iso88591 sed 's/.*| //' < in 
X 
Y 

ISO-8859-1 UTF-8 के रूप में व्याख्या नहीं की जा सकती है, डिकोडिंग इनपुट फ़ाइल विफल रहता है। अजीब मैच शायद इस तथ्य के कारण है कि sed पूरी तरह विफल होने की बजाय पुनर्प्राप्त करने का प्रयास करता है।

जवाब डेबियन लेनी/सिड पर आधारित है और 4.1.5 sed है।

+0

यह भी काम करता है, और मुझे sed का उपयोग करने की अनुमति देता है। धन्यवाद! – Dave

9

sed बहुत अच्छी तरह से गैर- ASCII पाठ के लिए सेटअप नहीं है। लेकिन अगर आप (लगभग) perl में उपयोग कर सकते हैं एक ही कोड और परिणाम प्राप्त आप चाहते हैं:

perl -pe 's/.*\| //' x 
+0

यह संकेत बहुत उपयोगी है। –

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