2016-04-28 6 views
5

में स्ट्रिंग से सभी विशेष वर्णों को हटा रहा है मेरे पास लोअरकेस में बहुत अधिक टेक्स्ट है, केवल समस्या यह है कि बहुत सारे विशेष वर्ण हैं, जिन्हें मैं इसे सभी संख्याओं से भी हटाना चाहता हूं।बैश

अगला आदेश यह पर्याप्त मजबूत नहीं है:

tr -cd '[alpha]\n ' 

और éćščž के मामले में कुछ अन्य लोगों ने उसे रिटर्न में "?" लेकिन मैं उन सभी को हटाना चाहता हूं। क्या कोई मजबूत आदेश है?

मैं लिनक्स टकसाल 4.3.8 (1) -release

+3

प्रत्येक चरित्र अपने तरीके से विशेष है। –

+0

आपका प्रश्न बहुत स्पष्ट नहीं है। थोड़ा और संदर्भ देने से शायद अधिक सहायक प्रतिक्रियाएं मिलेंगी। –

उत्तर

11

आप tr का उपयोग केवल नीचे की तरह स्ट्रिंग से प्रिंट करने योग्य वर्णों को मुद्रित करने के लिए कर सकते हैं। बस अपनी इनपुट फ़ाइल पर नीचे दिए गए कमांड का उपयोग करें।

tr -cd "[:print:]\n" < file1 

झंडा -d वर्ण सेट को नष्ट इनपुट धारा पर बहस में परिभाषित करने के लिए है, और -c उन (की विपरीत क्या प्रदान की जाती है) के पूरक के लिए है। तो बिना -c कमांड इनपुट स्ट्रीम से सभी प्रिंट करने योग्य पात्रों को हटा देगा और इसका उपयोग करके गैर-प्रिंट करने योग्य वर्णों को हटाकर इसे पूरा कर देगा। इनपुट फ़ाइल में लाइन समाप्ति को संरक्षित करने के लिए हम न्यूलाइन कैरेक्टर \n भी रखते हैं। इसे हटाने से केवल एक बड़ी लाइन में अंतिम आउटपुट उत्पन्न होगा।

[:print:] सिर्फ एक POSIX bracket expression जो भाव [:alnum:], [:punct:] और अंतरिक्ष का एक संयोजन है। [:alnum:] में ही है के रूप में [0-9A-Za-z] और [:punct:] पात्रों !"#$%&'()*+,-./:;<=>?@[\]^_`{| शामिल }~

2

मैं सिर्फ इतना कहना है कि "छोटे अक्षरों में पाठ की बहुत" में है वास्तव में कुछ जहां पाठ अपने प्रश्न में से आ रही है, लेकिन सुविधा देता है नहीं कर रहा हूँ का उपयोग फ़ाइल कहा जाता special.txt आप निम्नलिखित की तरह कुछ है, लेकिन पात्रों आप रखना चाहते हैं पर अधिक ध्यान केंद्रित कर सकते हैं:

cat special.txt | sed 's/[^a-z A-Z]//g' 

हालांकि यह एक कुल्हाड़ी से सर्जरी कर की तरह एक सा है।

पद Remove non-ascii characters from ...

ऊपर अपने प्रश्न का समाधान नहीं है, तो में एक अन्य संभावित समाधान, थोड़ा अधिक जानकारी प्रदान करने के लिए प्रयास करें और मैं एक कदम उठाने लायक जवाब प्रदान करने में सक्षम हो सकता है।