क्या हो रहा है
खोल (मार) तर्क देखता है [a-z]। यह एक वाइल्डकार्ड पैटर्न (एक ग्लोब ) है, जो किसी भी निचले अक्षर से मेल खाता है। इसलिए शेल एक फ़ाइल नाम के लिए दिखता है जो इस पैटर्न से मेल खाता है। तीन मामले हैं:
- वर्तमान निर्देशिका की किसी भी फ़ाइल में एक नाम नहीं है जो एक एकल लोअरकेस अक्षर है। फिर शेल वाइल्डकार्ड पैटर्न को अपरिवर्तित छोड़ देता है, और
trतर्कों को देखता है -dऔर [a-z]। यह आपकी अधिकांश मशीनों पर होता है।
- वर्तमान निर्देशिका में एक एकल फ़ाइल में एक नाम है जो एकल लोअरकेस अक्षर है। तब शेल इस फ़ाइल नाम के पैटर्न का विस्तार करता है, और
trतर्कों -dऔर फ़ाइल नाम को देखता है । यह सर्वर पर होता है, और मेल खाने वाली फ़ाइल को कहा जाता है oक्योंकि हम देख सकते हैं कि trपत्र को हटा दिया गया है o।
- वर्तमान निर्देशिका में दो या अधिक फ़ाइलों में एक नाम है जो एकल लोअरकेस अक्षर है। तब शेल फ़ाइल नामों के मिलान की सूची में पैटर्न का विस्तार करता है, और
trतीन या अधिक तर्क देखता है: -dऔर फ़ाइल नाम। चूंकि trएक के बाद एक तर्क की उम्मीद है -d, यह शिकायत करेगा।
आपको क्या करना चाहिए था
यदि कमांड के तर्क में विशेष वर्ण हैं, तो आपको उनसे बचना चाहिए। तर्क को एकल उद्धरणों में रखें '…'(यह सबसे सरल तरीका है, अन्य हैं)। सिंगल कोट्स के अंदर, सभी कैरेक्टर अपने लिए सिंगल कोटे को छोड़कर खुद के लिए खड़े होते हैं। यदि तर्क के अंदर एक भी उद्धरण है, तो इसे बदलें'\'' ।
tr -d '[a-z]'
हालांकि ध्यान दें कि यह अभी भी संभवतः वह नहीं है जो आप का मतलब है! यह trलोअरकेस अक्षर और वर्ग कोष्ठक को हटाने के लिए कहता है। यह समतुल्य अक्षरों को हटाने के लिए tr -d ']a-z[', के बराबर है tr '[]a-z', का उपयोग करें
tr -d a-z
तर्क trएक वर्ण सेट है। आप यह दर्शाने के लिए कि यह एक कैरेक्टर सेट है, एक नियमित अभिव्यक्ति या वाइल्डकार्ड पैटर्न में सेट किए गए वर्ण के चारों ओर कोष्ठक लगाते हैं। लेकिन trएक समय में एक ही चरित्र पर काम करता है। इसके कमांड लाइन तर्क हैं कि आप कोष्ठक के अंदर क्या रखेंगे ।
आपको वर्ण वर्गों को इंगित करने के लिए कोष्ठक की आवश्यकता है । एक नियमित अभिव्यक्ति में, आप वर्ण वर्ग को इंगित करने के लिए कोष्ठक के अंदर कोष्ठक का उपयोग करते हैं, उदाहरण [[:lower:]]*के लिए लोअरकेस अक्षरों की [[:lower:]_]*किसी भी संख्या से मेल खाता है , किसी भी लोअरकेस अक्षर से मेल खाता है और अंडरस्कोर करता है। के तर्क में tr, आपको इसके आसपास के कोष्ठक के बिना सेट की आवश्यकता होती है, इसलिए tr -d '[:lower:]'लोअरकेस अक्षर को tr -d '[:lower:]_'हटाता है , लोअरकेस अक्षर को हटाता है और अंडरस्कोर, आदि।
Some कुछ स्थानों में यह अन्य पात्रों से मेल खा सकता है ।
trपर्वतमाला बिना संलग्नक के लिखी गई हैं[...]। तोtr -d '[a-z]'मारेंगेa-z, और चरित्र भी[और]।tr -d a-zकेवल पत्रों को मारने के लिए उपयोग करेंa-z।