2013-08-18 4 views
7

मैं अंतिम फ़ाइल को फ़ाइल नाम से बाहर ले जाने की कोशिश कर रहा हूं जो अपरकेस हैं और उन्हें लोअरकेस में फ़ाइल नाम में जोड़ना है।ऊपरी, पूरे और पूर्ण कैप्चर नियंत्रण अनुक्रमों के साथ sed और Mac OS X मतभेद

ls | sed -e "s/.*\([A-Z][A-Z]\)$/\0\/\L\1\E/" 

इस लक्ष्य को हासिल करने के लिए और मेरे Ubuntu बॉक्स पर यह ठीक काम किया लेकिन अपने Mac पर यह बस एक 0/LXXE/ जहां XX कब्जा से सही पत्र बाहर प्रिंट: मैं आदेश expeceted।

\0, \L और \E के मैक sed समकक्ष क्या हैं?

मैंने वेब के चारों ओर एक नज़र डाली है और कई लोगों ने देखा है कि मैक ओएस एक्स sed उबंटू से अलग है लेकिन अधिकांश धागे -i फ़ाइल एक्सटेंशन या खाली स्ट्रिंग के लिए आवश्यक हैं (जो पहले मुझे ट्रिप कर चुका है)।

उत्तर

18

OSX sed पुराने संस्करण है और कार्यों \L, \E आदि का उपयोग कर मैक पर sed gnu स्थापित समर्थन नहीं करता:

brew install gnu-sed 
+7

'काढ़ा --default- स्थापित 'gsed' – TalkLittle

+1

के बजाय 'sed' के रूप में स्थापित करने के लिए gnu-sed' नाम" रूट के रूप में होमब्री चलाना बेहद खतरनाक है और अब समर्थित नहीं है। " – arekolek

+1

धन्यवाद @arekolek, यह एक बहुत अच्छा मुद्दा है। मैंने संपादित किया – anubhava

6

awk विकल्प:

ls | awk '{print $0 tolower(substr($0,length($0)-1,2))}' 
+0

आवश्यकतानुसार काम नहीं करता है (कम से कम ओएस एक्स पर) - अंतिम दो वर्ण दोहराए जाते हैं। –

+1

@PaulR: जहां तक ​​मुझे समझ में आया, ओपी यही चाहता था: '* ... पिछले दो अक्षर ले लो [...] और उन्हें संलग्न करें ... *'। यदि आप पिछले दो वर्णों को उनके निचले केस संस्करणों से * प्रतिस्थापित करना चाहते हैं, तो इसे आज़माएं: 'ls | awk '{प्रिंट सबस्ट्र ($ 0,1, लंबाई ($ 0) -2) tolower (substr ($ 0, लंबाई ($ 0) -1,2))} '' – mschilli

संबंधित मुद्दे