जैसा कि dj_segfault बताता है, शैल आपके लिए इनमें से अधिकतर कर सकता है। ऐसा लगता है कि स्ट्रिंग को कम करने के लिए आपको कुछ बाहरी पर वापस गिरना होगा। इसके लिए आपके पास कई विकल्प हैं, जैसे उपरोक्त पर्ल एक-लाइनर इत्यादि, लेकिन मुझे लगता है कि टी शायद सबसे सरल है।
# first, strip underscores
CLEAN=${STRING//_/}
# next, replace spaces with underscores
CLEAN=${CLEAN// /_}
# now, clean out anything that's not alphanumeric or an underscore
CLEAN=${CLEAN//[^a-zA-Z0-9_]/}
# finally, lowercase with TR
CLEAN=`echo -n $CLEAN | tr A-Z a-z`
यहां आदेश कुछ हद तक महत्वपूर्ण है। हम अंडरस्कोर से छुटकारा पाने के लिए, साथ ही अंडरस्कोर के साथ रिक्त स्थान को प्रतिस्थापित करना चाहते हैं, इसलिए हमें पहले अंडरस्कोर को पट्टी करना सुनिश्चित करना होगा। अंत तक चीजों को पार करने की प्रतीक्षा करके, हम जानते हैं कि हमारे पास केवल अल्फान्यूमेरिक और अंडरस्कोर हैं, और हम सुनिश्चित कर सकते हैं कि हमारे पास कोई रिक्त स्थान नहीं है, इसलिए हमें खोल के द्वारा वर्णित विशेष पात्रों के बारे में चिंता करने की आवश्यकता नहीं है।
पाठक को ध्यान दें: यदि आपको यह काम करने में परेशानी हो रही है, तो यह देखने के लिए कि क्या आप बैश या sh को कॉल कर रहे हैं, और आपका सिस्टम 'sh' कैसे व्याख्या करता है, अपने शेबैंग को जांचें। –
बैश 4 के रूप में, यह केस संशोधन भी कर सकता है। 'लोअरकेस = $ {स्वच्छ,}' [बैश हैकर्स विकी] (http: //wiki.bash- hackers।संगठन/वाक्यविन्यास/पे) मैन पेजों की तुलना में अधिक * मानव-पठनीय * तरीके में पैरामीटर विस्तार बताते हैं। – toxalot
अच्छा काम। मुझे पहले इन शैलियों की विशेषताओं से अवगत नहीं था। धन्यवाद! मैंने अभी पाया है कि zsh आपको वास्तव में * घोंसला * इन सभी को अनुमति देता है, ताकि आप इसे एक पंक्ति में कर सकें: 'echo -n $ {$ {$ {str // _ /} ///_} // [^ ए-जेए-जेड -9 _9] /} | tr ए-जेड ए-जेड .. यह नहीं कि मैं कुछ ऐसी चीज डालने की सिफारिश करूंगा जो एक स्क्रिप्ट में समझ में नहीं आता है। :) (संपादित करें: स्वरूपण) –