2012-07-20 14 views
8

मैं (चीनी, लैटिन आदि)एक फ़ाइल

की तरह अलग अलग भाषाओं से पात्रों के साथ एक पाठ फ़ाइल है से वे पंक्तियां गैर अंग्रेज़ी (ASCII) होते हैं वर्ण निकाल दें मैं सभी लाइनों है कि इन गैर अंग्रेजी शामिल निकालना चाहते हैं वर्ण। मैं सभी अंग्रेजी पात्रों (ए-बी), संख्याएं (0-9) और सभी विराम चिह्नों को शामिल करना चाहता हूं।

मैं अजीक या sed जैसे यूनिक्स उपकरण का उपयोग करके इसे कैसे कर सकता हूं।

उत्तर

15

पर्ल एक [:ascii:] चरित्र वर्ग का समर्थन करता है।

perl -nle 'print if m{^[[:ascii:]]+$}' inputfile 
+0

धन्यवाद। यह पूरी तरह से काम किया। – Sudar

2

आप egrep -v उपयोग कर सकते हैं केवल लाइनों नहीं पैटर्न मिलान लौट सकते हैं और [^ a-zA-Z0-9.,;:-'"?!] पैटर्न के रूप में की तरह कुछ का उपयोग करने के (आवश्यकतानुसार अधिक विराम चिह्न शामिल)।

एचएम, इसके बारे में सोचते हुए, एक डबल अस्वीकृति (-v और उलटा वर्ण वर्ग) शायद यह अच्छा नहीं है। एक और तरीका ^[ a-zA-Z0-9.,;:-'"?!]*$ हो सकता है।

आप, साथ ही ASCII के लिए फ़िल्टर कर सकते हैं:

egrep -v "[^ -~]" foo.txt 
+0

मैं सभी विराम की जरूरत है। तो क्या अनुमत वर्णों की सूची निर्दिष्ट करने के बजाय, सभी गैर-असीसी वर्णों को फ़िल्टर करना संभव है? – Sudar

+1

यह शायद आपके मुख्य बिंदु के लिए स्पर्शिक है, लेकिन सीमा [ए-जेड] में कुछ इलाकों में गैर-असीसी वर्ण शामिल हैं। उदाहरण के लिए, मेरे सिस्टम पर, 'echo é | grep [ए-जेड] 'मिल गया है। – Anachrome

1

आप Awk, आप सी लोकेल का उपयोग कराने के प्रदान की उपयोग कर सकते हैं:

LC_CTYPE=C awk '! /[^[:alnum:][:space:][:punct:]]/' my_file 

वातावरण चर LC_TYPE=C (या LC_ALL=C) चरित्र वर्गीकरण के लिए सी लोकेल का उपयोग कराने के। यह केवल ASCII वर्णों से मेल खाने के लिए वर्ण वर्गों ([:alnum:], [:space:], आदि) का अर्थ बदलता है।

/[^[:alnum:][:space:][:punct:]]/ किसी भी गैर ASCII चरित्र के साथ regex मिलान लाइनें। Regex स्थिति को उलटा करने से पहले !। तो बिना किसी गैर ASCII वर्णों के केवल लाइनें मिलेंगी। फिर जब कोई कार्रवाई नहीं की जाती है, तो मिलान क्रियाओं के लिए डिफ़ॉल्ट क्रिया का उपयोग किया जाता है (print)।

संपादित करें: यह भी ग्रेप साथ किया जा सकता:

LC_CTYPE=C grep -v '[^[:alnum:][:space:][:punct:]]' my_file 
1
जीएनयू ग्रेप, जो पर्ल संगत नियमित अभिव्यक्ति का समर्थन करता है के साथ

, तो आप उपयोग कर सकते हैं:

grep -P '^[[:ascii:]]+$' file 
संबंधित मुद्दे