2011-12-14 12 views
15

से अलग करने के लिए वहाँ एक रास्ता कुछ इस तरह परिवर्तित करने के लिए है , लेकिन इस तरह से नहीं; कोई विचार?linux bash, ऊंट मामले स्ट्रिंग पानी का छींटा

+0

ऊंट मामले को रीढ़ की हड्डी में मामले से जाने के लिए, आप देख सकते हैं: http://stackoverflow.com/questions/34420091/spinal-case-to-camel-case # 34420162 –

उत्तर

22

आप s/\([A-Z]\)/-\L\1/g उपयोग कर सकते हैं एक ऊपरी केस अक्षर खोजने के लिए और इसे एक डैश के साथ प्रतिस्थापित करें और इसका निचला मामला है। हालांकि, यह आपको लाइन की शुरुआत में एक डैश देता है, इसलिए आपको इसे संभालने के लिए एक और sed अभिव्यक्ति की आवश्यकता होती है।

यह काम करना चाहिए:

sed -e 's/\([A-Z]\)/-\L\1/g' -e 's/^-//' <<< "MyDirectoryFileLine" 
+0

मैंने कुछ ऐसा उपयोग किया: tmp2 = 'echo $ {tmp [@],} | sed -e's/\ ([ए-जेड] \)/- \ एल \ 1/g'' – armandfp

+1

केवल जीएनयू sed के लिए काम करता है। – 4ndrew

+1

बॉक्स के बाहर ओएस एक्स पर काम नहीं करता है - ओएस एक्स पर भी काम करने वाले समाधान के लिए @ 4ndrew का संस्करण देखें। – nwinkler

6

मुझे लगता है कि ऐसा करने के लिए एसईडी का उपयोग करने का प्रस्ताव:

NEW=`echo MyDirectoryFileLine | sed 's/\(.\)\([A-Z]\)/\1-\2/g' | tr '[:upper:]' '[:lower:]' 

युपीडी मैं, अपडेट किए गए कोड को लोअर केस में परिवर्तित करने के लिए भूल जाते हैं

+0

आप "अजीब उपयोग करने का प्रस्ताव करते हैं" लेकिन इसके बजाय अपने उत्तर में sed का उपयोग करें? – dogbane

+0

बस एक टाइपो, thx – 4ndrew

+0

यह बहुत अच्छा है, क्योंकि यह ओएन एक्स _sed_ के साथ भी काम करता है, बिना gnu संस्करण स्थापित करने की आवश्यकता के। – nwinkler

8
echo MyDirectoryFileLine | perl -ne 'print lc(join("-", split(/(?=[A-Z])/)))' 

प्रिंट my-directory-file-line

+1

अच्छा है, लेकिन इसके लिए पर्ल ओवरकिल नहीं है? –

+1

कॉलिंग पर्ल वास्तव में अब बैश का उपयोग नहीं कर रहा है, है ना? – GreenMatt

0

साथ जीएनयू sed:

echo "MyDirectoryFileLine"|sed -e 's/\([A-Z]\)/-\L\1/g' 

तुम बस पहले पानी का छींटा पट्टी अगर है कि जरूरत है आप परेशान:

echo "MyDirectoryFileLine"|sed -e 's/\([A-Z]\)/-\L\1/g' -e 's/^-//' 
साथ

बीएसडी यह sed है लंबे समय तक एक सा:

echo "MyDirectoryFileLine"|sed -e 's/\([A-Z]\)/-\1/g' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' -e 's/^-//' 

अद्यतन: बीएसडी संस्करण जीएनयू संस्करण के साथ काम करेंगे, तो मैं बाद का उपयोग करें।

0

यह आप के लिए काम कर सकते हैं:

<<<"MyDirectoryFileLine" sed 's/[A-Z]/-\l&/g;s/.//' 
my-directory-file-line