ऑनवर्क्स लिनक्स और विंडोज ऑनलाइन वर्कस्टेशन

प्रतीक चिन्ह

वर्कस्टेशन के लिए मुफ्त होस्टिंग ऑनलाइन

<पिछला | विषय-सूची | अगला>

स्ट्रिंग ऑपरेशंस

विस्तारों का एक बड़ा समूह है जिसका उपयोग स्ट्रिंग्स पर काम करने के लिए किया जा सकता है। इनमें से कई विस्तार पथनामों पर संचालन के लिए विशेष रूप से उपयुक्त हैं।

${#प्राचल}

द्वारा निहित स्ट्रिंग की लंबाई में विस्तारित होता है प्राचल। सामान्य रूप से, प्राचल एक स्ट्रिंग है; हालांकि, यदि प्राचल या तो @ or *, तो विस्तार के परिणामस्वरूप स्थितीय मापदंडों की संख्या होती है।



[मुझे@लिनक्सबॉक्स ~]$ foo='यह स्ट्रिंग लंबी है।'

[मुझे@लिनक्सबॉक्स ~]$ इको "'$foo' ${#foo} अक्षर लंबा है।"

'यह डोर लंबी है।' 20 अक्षर लंबा है.

[मुझे@लिनक्सबॉक्स ~]$ foo='यह स्ट्रिंग लंबी है।'

[मुझे@लिनक्सबॉक्स ~]$ इको "'$foo' ${#foo} अक्षर लंबा है।"

'यह डोर लंबी है।' 20 अक्षर लंबा है.


${प्राचल:ओफ़्सेट}

${प्राचल:ओफ़्सेट:लंबाई}

इन विस्तारों का उपयोग इसमें निहित स्ट्रिंग के एक हिस्से को निकालने के लिए किया जाता है प्राचल. निष्कर्षण शुरू होता है ओफ़्सेट स्ट्रिंग की शुरुआत से वर्ण और स्ट्रिंग के अंत तक जारी रहता है, जब तक कि लंबाई अधिकृत है।


[मुझे@लिनक्सबॉक्स ~]$ foo='यह स्ट्रिंग लंबी है।'

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo:5}

स्ट्रिंग लंबी है.

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo:5:6}

स्ट्रिंग

[मुझे@लिनक्सबॉक्स ~]$ foo='यह स्ट्रिंग लंबी है।'

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo:5}

स्ट्रिंग लंबी है.

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo:5:6}

स्ट्रिंग


यदि का मान ओफ़्सेट नकारात्मक है, तो इसका अर्थ यह माना जाता है कि यह शुरुआत के बजाय स्ट्रिंग के अंत से शुरू होता है। ध्यान दें कि भ्रम की स्थिति को रोकने के लिए नकारात्मक मानों के पहले एक स्थान होना चाहिए ${प्राचल:-शब्द} विस्तार। लंबाई, यदि मौजूद है, तो शून्य से कम नहीं होना चाहिए।

If प्राचल is @, विस्तार का परिणाम है लंबाई स्थितीय पैरामीटर, से शुरू

ऑफसेट।



[मुझे@लिनक्सबॉक्स ~]$ foo='यह स्ट्रिंग लंबी है।'

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo:-5}

लंबा।

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo: -5:2}

lo

[मुझे@लिनक्सबॉक्स ~]$ foo='यह स्ट्रिंग लंबी है।'

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo:-5}

लंबा।

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo: -5:2}

lo


${प्राचल#पैटर्न}

${प्राचल##पैटर्न}

ये विस्तार इसमें निहित स्ट्रिंग के एक प्रमुख हिस्से को हटा देते हैं प्राचल द्वारा परिभाषित पैटर्न. पैटर्न यह एक वाइल्डकार्ड पैटर्न है जैसा कि पथनाम विस्तार में उपयोग किया जाता है। दोनों रूपों में अंतर यह है कि # प्रपत्र सबसे छोटे मिलान को हटा देता है, जबकि ## प्रपत्र सबसे लंबे मिलान को हटा देता है.



[मुझे@लिनक्सबॉक्स ~]$ foo=file.txt.zip [मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo#*.} txt.zip

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo##*.}

ज़िप

[मुझे@लिनक्सबॉक्स ~]$ foo=file.txt.zip [मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo#*.} txt.zip

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo##*.}

ज़िप


${प्राचल%पैटर्न}

${प्राचल%%पैटर्न}

ये विस्तार वैसे ही हैं जैसे # और ## उपरोक्त विस्तार, सिवाय इसके कि वे इसमें निहित स्ट्रिंग के अंत से पाठ को हटा देते हैं प्राचल शुरुआत से नहीं.



[मुझे@लिनक्सबॉक्स ~]$ foo=file.txt.zip

[मुझे@लिनक्सबॉक्स ~]$ foo=file.txt.zip


[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo%*}

फ़ाइल.txt

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo%%.*}

पट्टिका

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo%*}

फ़ाइल.txt

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo%%.*}

पट्टिका


${प्राचल/पैटर्न/स्ट्रिंग}

${प्राचल//पैटर्न/स्ट्रिंग}

${प्राचल/#पैटर्न/स्ट्रिंग}

${प्राचल/%पैटर्न/स्ट्रिंग}

यह विस्तार इसकी सामग्री पर खोज-और-प्रतिस्थापन करता है प्राचल. यदि टेक्स्ट वाइल्डकार्ड से मेल खाता हुआ पाया जाता है पैटर्न, इसे की सामग्री से बदल दिया जाता है स्ट्रिंग. सामान्य रूप में, केवल पहली घटना पैटर्न के स्थान पर आ गया है। में // प्रपत्र, सभी घटनाएं प्रतिस्थापित हो जाती हैं। /# फॉर्म के लिए आवश्यक है कि मिलान स्ट्रिंग की शुरुआत में हो, और /% प्रपत्र के लिए आवश्यक है कि मिलान स्ट्रिंग के अंत में हो। हर रूप में,/स्ट्रिंग छोड़ा जा सकता है, जिससे पाठ का मिलान हो सकता है पैटर्न हटाए जाने के लिए।



[मुझे@लिनक्सबॉक्स ~]$ foo=JPG.JPG [मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo/JPG/jpg} jpg.जेपीजी

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo//JPG/jpg}

jpg.jpg

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo/#JPG/jpg}

jpg.जेपीजी

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo/%JPG/jpg}

JPG.jpg

[मुझे@लिनक्सबॉक्स ~]$ foo=JPG.JPG [मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo/JPG/jpg} jpg.जेपीजी

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo//JPG/jpg}

jpg.jpg

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo/#JPG/jpg}

jpg.जेपीजी

[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि ${foo/%JPG/jpg}

JPG.jpg


पैरामीटर विस्तार जानना एक अच्छी बात है। स्ट्रिंग मैनिपुलेशन विस्तार का उपयोग अन्य सामान्य कमांड जैसे विकल्प के रूप में किया जा सकता है प्यास और कमी. विस्तार बाहरी कार्यक्रमों के उपयोग को समाप्त करके स्क्रिप्ट की दक्षता में सुधार कर सकता है। उदाहरण के तौर पर, हम इसे संशोधित करेंगे सबसे लंबा शब्द पैरामीटर विस्तार का उपयोग करने के लिए पिछले अध्याय में चर्चा की गई प्रोग्राम ${#जे} कमांड प्रतिस्थापन के स्थान पर $(प्रतिध्वनि

-एन$ज | wc -c) और इसके परिणामी उपकोश, जैसे:


#! / Bin / bash

# longest-word3: i के लिए फ़ाइल में सबसे लंबी स्ट्रिंग ढूंढें; करना

यदि [[ -r $i ]]; फिर max_word= max_len=0

#! / Bin / bash

# longest-word3: i के लिए फ़ाइल में सबसे लंबी स्ट्रिंग ढूंढें; करना

यदि [[ -r $i ]]; फिर max_word= max_len=0


$(स्ट्रिंग्स $i) में j के लिए; करना

लेन=${#j}

अगर (( लेन > मैक्स_लेन )); फिर max_len=$len max_word=$j

fi

किया

इको "$i: '$max_word' ($max_len अक्षर)"

फाई हो गया

$(स्ट्रिंग्स $i) में j के लिए; करना

लेन=${#j}

अगर (( लेन > मैक्स_लेन )); फिर max_len=$len max_word=$j

fi

किया

इको "$i: '$max_word' ($max_len अक्षर)"

फाई हो गया


आगे, हम इसका उपयोग करके दोनों संस्करणों की दक्षता की तुलना करेंगे पहर आदेश:



[मुझे@लिनक्सबॉक्स ~]$ समय सबसे लंबा-शब्द2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'स्क्रॉलकीपर-गेट-एक्सटेंडेड-कंटेंट-लिस्ट' (38 अक्षर)

[मुझे@लिनक्सबॉक्स ~]$ समय सबसे लंबा-शब्द2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'स्क्रॉलकीपर-गेट-एक्सटेंडेड-कंटेंट-लिस्ट' (38 अक्षर)


वास्तविक

उपयोगकर्ता

0m3.618s

0m1.544s

वास्तविक

उपयोगकर्ता


sys 0m1.768s

[मुझे@लिनक्सबॉक्स ~]$ समय सबसे लंबा-शब्द3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'स्क्रॉलकीपर-गेट-एक्सटेंडेड-कंटेंट-लिस्ट' (38 अक्षर)

sys 0m1.768s

[मुझे@लिनक्सबॉक्स ~]$ समय सबसे लंबा-शब्द3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'स्क्रॉलकीपर-गेट-एक्सटेंडेड-कंटेंट-लिस्ट' (38 अक्षर)


वास्तविक

उपयोगकर्ता

0m0.060s

0m0.056s

वास्तविक

उपयोगकर्ता


sys 0m0.008s

sys 0m0.008s


की छवि

स्क्रिप्ट के मूल संस्करण को टेक्स्ट फ़ाइल को स्कैन करने में 3.618 सेकंड लगते हैं, जबकि पैरामीटर विस्तार का उपयोग करते हुए नए संस्करण को केवल 0.06 सेकंड लगते हैं-एक बहुत ही महत्वपूर्ण सुधार.


OnWorks पर शीर्ष OS क्लाउड कंप्यूटिंग: