क्या हो रहा है
खोल (मार) तर्क देखता है [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
।