zsh und zmv: Welche regulären Ausdrücke?

04/08/2008 - 17:13 von Kevin Osthof | Report spam
Hallo!

Ich hab hier gerade einen haufen Dateien, welche nach einem neuen Schema
unbenannt werden müssen. Da ich mal wieder was neues ausprobieren
wollte, hab ich gedacht, ich mache es mit zsh und dem zmv-Tool.

Die Dateien sehen so aus:

altes Format: blablab_blup_blabla_blup_1710.txt
neues Format 1710 blabla blup blabla bvlup.txt
Dabei ist die Jahreszahl natürlich variable, genauso wie die Anzahl der
Unterstriche.

Mit Perl hab ich es so gemacht:
m/([^0-9]*)([0-9]{4}).*/;
([^0-9]*)= Alles bis zum beginn der Zahlen matchen
([0-9]{4})= Und dann die 4 Zahlen für das Jahr.
Dann halt die Unterstriche raus und den neuen Dateinamen gebaut.

Jetzt hab ich probiert, das ganze mit zmv unter der zsh zu machen.
Folgendes schlàgt aber schon fehl:
zmv -n '([^:digit:]*)*' '${1}'
Soll also nur den String ohne Jahreszahl matchen.
Ebenfall probiert habe ich:
'(<^0-9>*)*'(laut Refernce-Card) und '([^0-9]*)*'

Wie macht man es richtig?
 

Lesen sie die antworten

#1 Florian Diesch
06/08/2008 - 05:51 | Warnen spam
Kevin Osthof wrote:

Ich hab hier gerade einen haufen Dateien, welche nach einem neuen Schema
unbenannt werden müssen. Da ich mal wieder was neues ausprobieren
wollte, hab ich gedacht, ich mache es mit zsh und dem zmv-Tool.

Die Dateien sehen so aus:

altes Format: blablab_blup_blabla_blup_1710.txt
neues Format 1710 blabla blup blabla bvlup.txt
Dabei ist die Jahreszahl natürlich variable, genauso wie die Anzahl der
Unterstriche.

Mit Perl hab ich es so gemacht:
m/([^0-9]*)([0-9]{4}).*/;
([^0-9]*)= Alles bis zum beginn der Zahlen matchen
([0-9]{4})= Und dann die 4 Zahlen für das Jahr.
Dann halt die Unterstriche raus und den neuen Dateinamen gebaut.

Jetzt hab ich probiert, das ganze mit zmv unter der zsh zu machen.
Folgendes schlàgt aber schon fehl:
zmv -n '([^:digit:]*)*' '${1}'



Das Muster ist ein zsh-Glob, keine Regex.


Soll also nur den String ohne Jahreszahl matchen.
Ebenfall probiert habe ich:
'(<^0-9>*)*'(laut Refernce-Card) und '([^0-9]*)*'

Wie macht man es richtig?



Bis auf die Unterstriche:

zmv -n '([^[:digit:]]##)_(<->).txt' '$2 $1.txt'



Florian
<http://www.florian-diesch.de/>
** Hi! I'm a signature virus! Copy me into your signature, please! **

Ähnliche fragen