परिचय:
बैश में फ़ाइलों के साथ काम करते समय, आपको अक्सर फ़ाइल नाम को उसके एक्सटेंशन से अलग करने की आवश्यकता हो सकती है। एक सामान्य दृष्टिकोण `कट` कमांड का उपयोग करता है, लेकिन यह विधि उन फ़ाइल नामों के साथ विफल हो सकती है जिनमें एकाधिक अवधियां होती हैं।
उदाहरण के लिए, `a.b.js` जैसा फ़ाइल नाम गलत तरीके से `a.b` और `js` के बजाय `a` और `b.js` में विभाजित हो जाएगा। हालाँकि Python `os.path.splitext()` के साथ एक आसान समाधान प्रदान करता है, Python का उपयोग करना हमेशा सबसे कुशल विकल्प नहीं हो सकता है। यह आलेख बैश में इस कार्य को प्राप्त करने के लिए बेहतर तरीकों की खोज करता है।
| आज्ञा | विवरण |
|---|---|
| ${variable%.*} | फ़ाइल नाम से एक्सटेंशन हटाने के लिए पैरामीटर विस्तार। |
| ${variable##*.} | फ़ाइल नाम से एक्सटेंशन निकालने के लिए पैरामीटर विस्तार। |
| awk -F. | फ़ील्ड विभाजक को एक अवधि पर सेट करता है, जिसका उपयोग फ़ाइल नाम को विभाजित करने के लिए किया जाता है। |
| OFS="." | Awk में आउटपुट फ़ील्ड सेपरेटर, बिना एक्सटेंशन के फ़ाइल नाम को फिर से बनाने के लिए उपयोग किया जाता है। |
| NF-- | awk में फ़ील्ड की संख्या को एक से कम कर देता है, एक्सटेंशन को प्रभावी ढंग से हटा देता है। |
| ${BASH_REMATCH} | ऐरे जो बैश में नियमित अभिव्यक्ति से मिलान रखता है। |
| local variable | बैश में एक फ़ंक्शन के भीतर स्थानीय दायरे के साथ एक वैरिएबल घोषित करता है। |
बैश सॉल्यूशंस का विस्तृत विवरण
प्रदान की गई स्क्रिप्ट बैश में फ़ाइल नाम और उसके एक्सटेंशन को अलग करने के लिए विभिन्न तरीकों की पेशकश करती है। पहली स्क्रिप्ट बैश पैरामीटर विस्तार का उपयोग करती है। परिवर्तनशील ${FILE%.*} जबकि, अंतिम अवधि से लेकर स्ट्रिंग के अंत तक सब कुछ अलग करके एक्सटेंशन को हटा देता है ${FILE##*.} अंतिम अवधि के बाद सब कुछ लेकर विस्तार पर कब्जा कर लेता है। अधिकांश फ़ाइल नाम संरचनाओं के लिए यह विधि सीधी और कुशल है। दूसरी स्क्रिप्ट का उपयोग करता है awk, यूनिक्स जैसे वातावरण में एक शक्तिशाली पाठ-प्रसंस्करण उपकरण। फ़ील्ड विभाजक को किसी अवधि का उपयोग करके सेट करके -F., यह फ़ाइल नाम को भागों में विभाजित करने की अनुमति देता है। आउटपुट फ़ील्ड विभाजक, OFS=".", और फ़ील्ड की संख्या कम करना NF-- फ़ाइल नाम को उसके एक्सटेंशन के बिना पुनः संयोजित करने की तकनीकें हैं।
तीसरी स्क्रिप्ट बैश में लीवरेजिंग के रूप में नियमित अभिव्यक्तियों को नियोजित करती है ${BASH_REMATCH} रेगेक्स मैच में समूहों को कैप्चर करने के लिए। यह स्क्रिप्ट एक पैटर्न का उपयोग करती है जो फ़ाइल नाम को दो समूहों में विभाजित करती है: एक आधार नाम के लिए और एक एक्सटेंशन के लिए। अंत में, कस्टम फ़ंक्शन स्क्रिप्ट फ़ंक्शन के भीतर पैरामीटर विस्तार तर्क को समाहित करती है, जिससे कोड पुन: प्रयोज्यता और पठनीयता बढ़ती है। यह उपयोगकर्ता है local variable बड़ी स्क्रिप्टों में अनपेक्षित दुष्प्रभावों को रोकने के लिए, फ़ंक्शन के भीतर वेरिएबल्स को सीमित रखने की घोषणाएँ। प्रत्येक विधि एक ही समस्या को हल करने के लिए एक अलग दृष्टिकोण प्रदर्शित करती है, जो बैश स्क्रिप्टिंग की बहुमुखी प्रतिभा और शक्ति को प्रदर्शित करती है।
बैश में पैरामीटर विस्तार का उपयोग करना
बैश स्क्रिप्टिंग
#!/bin/bash# Script to extract filename and extension using parameter expansionFILE="a.b.js"FILENAME="${FILE%.*}"EXTENSION="${FILE##*.}"echo "Filename: $FILENAME"echo "Extension: $EXTENSION"
फ़ाइल नाम और एक्सटेंशन को अलग करने के लिए Awk का उपयोग करना
अवेक के साथ बैश
#!/bin/bash# Script to extract filename and extension using awkFILE="a.b.js"FILENAME=$(echo "$FILE" | awk -F. '{OFS="."; NF--; print $0}')EXTENSION=$(echo "$FILE" | awk -F. '{print $NF}')echo "Filename: $FILENAME"echo "Extension: $EXTENSION"
बैश में रेगुलर एक्सप्रेशन का उपयोग करना
रेगेक्स के साथ बैश स्क्रिप्टिंग
#!/bin/bash# Script to extract filename and extension using regexFILE="a.b.js"[[ "$FILE" =~ (.*)\.(.*) ]]FILENAME=${BASH_REMATCH[1]}EXTENSION=${BASH_REMATCH[2]}echo "Filename: $FILENAME"echo "Extension: $EXTENSION"
बैश में एक कस्टम फ़ंक्शन का उपयोग करना
कस्टम फ़ंक्शन के साथ बैश स्क्रिप्टिंग
#!/bin/bash# Function to extract filename and extensionextract_filename_extension() {local file="$1"echo "Filename: ${file%.*}"echo "Extension: ${file##*.}"}# Call the function with a fileextract_filename_extension "a.b.js"
बैश में फ़ाइल हेरफेर के लिए वैकल्पिक तरीकों की खोज
पहले से चर्चा की गई विधियों के अलावा, फ़ाइल नाम और एक्सटेंशन में हेरफेर करने के लिए बैश में अन्य उपयोगी तकनीकें भी हैं। ऐसी ही एक विधि में का उपयोग करना शामिल है basename और dirname आदेश. basename जबकि, पथ से फ़ाइल नाम निकालने के लिए उपयोग किया जा सकता है dirname निर्देशिका पथ पुनः प्राप्त करता है। इन आदेशों को पैरामीटर विस्तार के साथ संयोजित करने से फ़ाइल नाम और एक्सटेंशन को प्रभावी ढंग से अलग किया जा सकता है। उदाहरण के लिए, का उपयोग करना basename "$FILE" ".${FILE##*.}" फ़ाइल नाम से एक्सटेंशन हटा देता है. केवल फ़ाइल नामों के बजाय पूर्ण फ़ाइल पथों के साथ काम करते समय यह दृष्टिकोण विशेष रूप से उपयोगी होता है।
एक अन्य विधि में उपयोग करना शामिल है sed, टेक्स्ट को फ़िल्टर करने और बदलने के लिए एक शक्तिशाली स्ट्रीम संपादक। उचित नियमित अभिव्यक्ति तैयार करके, sed फ़ाइल नाम और एक्सटेंशन को अलग कर सकते हैं. उदाहरण के लिए, आदेश echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' फ़ाइल नाम और एक्सटेंशन को अलग-अलग कैप्चर समूहों में रखकर विभाजित करता है। यह तकनीक लचीली है और जटिल फ़ाइल नाम संरचनाओं को संभाल सकती है। इन अतिरिक्त उपकरणों और विधियों की खोज से बैश में फ़ाइल डेटा में हेरफेर करने की आपकी क्षमता का विस्तार होता है, जो विभिन्न स्क्रिप्टिंग परिदृश्यों के लिए मजबूत समाधान प्रदान करता है।
बैश फ़ाइल हेरफेर पर अक्सर पूछे जाने वाले प्रश्न
- का उद्देश्य क्या है ${FILE%.*} आज्ञा?
- यह अंतिम अवधि के बाद सब कुछ हटाकर फ़ाइल नाम से एक्सटेंशन हटा देता है।
- कैसे करता है ${FILE##*.} आदेश कार्य?
- यह फ़ाइल नाम की अंतिम अवधि के बाद सब कुछ लेकर एक्सटेंशन निकालता है।
- क्या करता है awk -F. प्रदत्त स्क्रिप्ट में क्या करें?
- यह फ़ील्ड विभाजक को एक अवधि पर सेट करता है, जिससे फ़ाइल नाम को भागों में विभाजित किया जा सकता है।
- क्यों उपयोग करें? NF-- एक में awk लिखी हुई कहानी?
- यह फ़ाइल नाम से एक्सटेंशन को प्रभावी ढंग से हटाकर, फ़ील्ड की संख्या को एक से कम कर देता है।
- फ़ाइल नाम और एक्सटेंशन निकालने में रेगुलर एक्सप्रेशन कैसे मदद करते हैं?
- वे पैटर्न मिलान और समूहीकरण की अनुमति देते हैं, जो फ़ाइल नाम के विभिन्न हिस्सों को अलग कर सकते हैं।
- बैश में कस्टम फ़ंक्शन का उपयोग करने का क्या लाभ है?
- एक कस्टम फ़ंक्शन कोड पुन: प्रयोज्यता और पठनीयता को बढ़ाता है, जिससे स्क्रिप्ट अधिक मॉड्यूलर बन जाती है।
- कैसे हुआ basename फ़ाइल नाम के साथ मदद करें?
- यह वैकल्पिक रूप से एक्सटेंशन को हटाते हुए, पूर्ण फ़ाइल पथ से फ़ाइल नाम निकालता है।
- कर सकना sed फ़ाइल नाम हेरफेर के लिए उपयोग किया जाएगा?
- हाँ, sed फ़ाइल नाम के हिस्सों को बदलने और अलग करने के लिए नियमित अभिव्यक्तियों का उपयोग कर सकते हैं।
फ़ाइल नाम और एक्सटेंशन निष्कर्षण के लिए समाधान तैयार करना
अंत में, बैश में फ़ाइल नाम और एक्सटेंशन को विभिन्न तरीकों से प्रभावी ढंग से निकाला जा सकता है, जिनमें से प्रत्येक अलग-अलग आवश्यकताओं और प्राथमिकताओं के अनुकूल है। चाहे पैरामीटर विस्तार, awk, sed, या कस्टम फ़ंक्शंस का उपयोग किया जाए, ये तकनीकें लचीली और कुशल समाधान प्रदान करती हैं। इन आदेशों को समझना और उपयोग करना यह सुनिश्चित करता है कि स्क्रिप्ट बिना किसी त्रुटि के कई अवधियों और अन्य जटिलताओं वाले फ़ाइल नामों को संभाल सकती हैं।