2013-08-18 5 views
7

Ich versuche, die letzten zwei Buchstaben aus einem Dateinamen, die Großbuchstaben sind, und fügen Sie sie an den Dateinamen in Kleinbuchstaben. Ich expeceted den Befehl:sed und Mac OS X Unterschiede mit oberen, unteren und ganzen Capture-Steuersequenzen

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

dies zu erreichen, und auf meiner Ubuntu-Box funktionierte es gut, aber auf meinem Mac druckt es einfach ein 0/LXXE/, wo XX die richtigen Buchstaben aus dem Capture sind.

Was sind die Mac sed Äquivalente von \0, \L und \E?

Ich habe mich im Internet umgeschaut und einige Leute haben bemerkt, dass Mac OS X sed sich von Ubuntu sed unterscheidet, aber die meisten Threads sprechen von der -i Anforderung für eine Dateierweiterung oder eine leere Zeichenfolge (was mich zuvor gestolpert hat).

Antwort

18

OSX sed ist ältere Version und unterstützt keine Funktionen \L, \E usw. Gnu auf Mac sed installieren mit:

brew install gnu-sed 
+7

'Gebräu installieren --default- benennt gnu-sed, um 'sed' anstelle von' gsed' zu installieren – TalkLittle

+1

"Homebrew als root auszuführen ist extrem gefährlich und wird nicht mehr unterstützt." – arekolek

+1

Danke @arekolek, das ist ein sehr guter Punkt. Ich habe bearbeitet. – anubhava

6

awk Alternative:

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

Scheint nicht wie erforderlich zu funktionieren (zumindest unter OS X) - die letzten beiden Zeichen werden wiederholt. –

+1

@PaulR: So weit ich es verstanden habe, wollte das OP: '* ... die letzten zwei Buchstaben nehmen [...] und sie anhängen ... *'. Wenn Sie die letzten beiden Zeichen durch ihre Kleinbuchstaben ersetzen wollen, versuchen Sie folgendes: 'ls | awk '{print substr ($ 0, 1, length ($ 0) -2) tolower (substr ($ 0, length ($ 0) -1,2))}' – mschilli