ubuntuusers.de

Reguläre Ausdrücke: Bindestrich nach Zahl finden

Status: Gelöst | Ubuntu-Version: Kubuntu 13.10 (Saucy Salamander)
Antworten |

BlackJack

Anmeldungsdatum:
19. Februar 2006

Beiträge: 595

Ich habe diverse Dateien, die in etwa so aussehen:

1
2
3
05-Längerer Songtitel.mp3
2008-04-Dokument bei dem es nur auf den Monat ankommt.odt
2008-12-14-Dokument bei dem ein Tag angegeben wurde.odt

Mittels KRename versuche ich vor und nach dem Bindestrich hinter der (letzten) Zahl jeweils ein Leerzeichen einzufügen. Die gewünschten Ergebnisse sähen so aus:

1
2
3
05 - Längerer Songtitel.mp3
2008-04 - Dokument bei dem es nur auf den Monat ankommt.odt
2008-12-14 - Dokument bei dem ein Tag angegeben wurde.odt

Nachdem ich jetzt seit einiger Zeit bastle, finde ich keine Lösung. Was ich geschafft habe, ist bspw. für die MP3-Datei mittels folgendem Ausdruck die Zahlenfolge mit dem Bindestrich zu finden.

1
^[0-9]{2}-

Nun weiß ich aber nicht, wie ich das Konstrukt mit derselben (!) Zahlenfolge sowie einem Leerzeichen, einem Bindestrich und einem weiteren Leerzeichen ersetze. Kann jemand helfen?

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Folgender Ausdruck findet den letzten Bindestrich, auf den keine Zahl mehr folgt:

1
-(?!\d)

Vielleicht hilft das ja schon weiter.

Mit KRename kenne ich mich leider nicht aus. ☹

BlackJack

(Themenstarter)

Anmeldungsdatum:
19. Februar 2006

Beiträge: 595

Das hat schon mal deutlich weiter geholfen. Übrig bleiben aber noch bspw. Songtitel die im Titel (!) mit einer Zahl beginngen. Z.B. "12-4 Songs.mp3". Wie kann ich einen Bindestrich finden, dem sowohl eine Zahl vorausgeht als auch eine Zahl folgt?

BlackJack

(Themenstarter)

Anmeldungsdatum:
19. Februar 2006

Beiträge: 595

Ich habe ein bisschen rum probiert. Folgender Code findet zwar die Stelle, schneidet aber auch die Zahl vor und nach dem Bindesstrich ab:

1
(\d)-(\d)

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Was Du suchst, ist ja im Grunde "ein Bindestrich vor einer Nicht-Zahl, nach einer Zahl", und da sollen dann 2 Leerzeichen hineingemogelt werden.

Nun weiß ich nicht welchen RE-Dialekt krename benutzt, aber grundsätzlich könnte man das genau so umsetzen:

track@lucid:~$ echo '05-Längerer Songtitel.mp3
2008-04-Dokument bei dem es nur auf den Monat ankommt.odt
2008-12-14-Dokument bei dem ein Tag angegeben wurde.odt'  |  sed -r 's/([0-9])-([^0-9])/\1 - \2/'
05 - Längerer Songtitel.mp3
2008-04 - Dokument bei dem es nur auf den Monat ankommt.odt
2008-12-14 - Dokument bei dem ein Tag angegeben wurde.odt
track@lucid:~$ echo '05-Längerer Songtitel.mp3
2008-04-Dokument bei dem es nur auf den Monat ankommt.odt
2008-12-14-Dokument bei dem ein Tag angegeben wurde.odt'  |  perl -pe 's/([0-9])-([^0-9])/\1 - \2/'
05 - Längerer Songtitel.mp3
2008-04 - Dokument bei dem es nur auf den Monat ankommt.odt
2008-12-14 - Dokument bei dem ein Tag angegeben wurde.odt 

Falls es mit krename nicht funktioniert, könntest Du das gewöhnliche rename im Terminal benutzen, das versteht auf jeden Fall die Perl-Syntax.

LG,

track

BlackJack

(Themenstarter)

Anmeldungsdatum:
19. Februar 2006

Beiträge: 595

Nachdem ich die Lösung von snafu1 mittlerweile angewendet habe, suche ich eigentlich eher nach "einem Bindestrich vor einer und nach einer Zahl". Dort sollen dann Leerzeichen rein. Im Moment habe ich nämlich manche Dateien, die folgendermaßen aussehen:

1
12-24 Preludes.mp3

Dies sollen - wie anderen Songtitel - so aussehen:

1
12 - 24 Preludes.mp3

BlackJack

(Themenstarter)

Anmeldungsdatum:
19. Februar 2006

Beiträge: 595

Jetzt habe ich es endlich gelöst. Eine saubere Lösung habe ich nicht gefunden, aber immerhin habe ich es nach Stunden des Probierens und des Verfluchens von regulären Ausdrücken endlich geschafft. Ich habe nacheinander folgende regulären Ausdrücke verwendet:

  1. nach -(?!\d) gesucht und durch " - " ersetzt. Problem: Bindestriche auf die doch noch eine Zahl folgt (weil bspw. der Songtitel eine Zahl an erster Stelle enthält; vgl. dazu oben). Deshalb:

  2. nach -(?!=\d) gesucht und durch " - " ersetzt. Problem: Nun finden sich bei allen Dateien, die im ersten Schritt bereits umbenannt wurden vor und nach dem betreffenden - jeweils 2 Leerzeichen. Deshalb:

  3. Nach 2 Leerzeichen gesucht und durch eines ersetzt.

Antworten |