staging.inyokaproject.org

String vor letztem "-" abschneiden

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

darkbrain85

Anmeldungsdatum:
24. April 2017

Beiträge: 2

Hi zusammen!

Nachdem ich jetzt mehre Tage daran verzweifle, muss ich einfach mal hier nachfragen.

Folgende Problemstellung:

Ich habe jede Menge Dateien nach folgendem Schema:

"Dokument - 12.Februar 2017.pdf"

Diese Namen möchte ich nun mit Hilfe von sed vor dem Bindestrich abschneiden. Dann erhalte ich "Dokument.pdf". Soweit so gut, das bekomme ich hin. Was ich nicht schaffe, ist erst vor dem letzten Bindestrich abzuschneiden. Beispiel:

"Dokument - Finanzen - 12. Februar 2017.pdf"

Wie muss der regex aussehen damit das klappt?

Hintergrund:

Hier wird ein DMS zur Verwaltung von Dokumenten verwendet. Leider wurde vor 4 Jahren das oben genannte Format verwendet. Dies soll nun geändert werden. Das Datum soll hinten weg, und vorne im Format yyyymmtt vorangestellt werden.

Das neue Datum erhalte ich aus dem Erstellungsdatum und wurde bereits erfolgreich hinzugefügt. Ich würde halt jetzt gerne das hintere Datum bei den alten Dokumenten abschneiden.

Wenn jemand einen Tip hat, wäre das großartig. Bedingung: Es muss ein regex mit sed sein, da das DMS im Hintergrund sed aufruft und ich auf keinen Fall die Dateien ohne das DMS umbenennen kann. Dies würde ein Neuaufbau der Datenbank erfordern, was ich verhindern will.

Danke Euch!

Gruß

Michèl

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

1
2
3
4
5
$ name="Dokument - Finanzen - 12. Februar 2017.pdf"
$ echo "${name% - *}"
Dokument - Finanzen
$ echo "${name% - *}.pdf"
Dokument - Finanzen.pdf

Wenn die Erweiterungen verschieden sind, muss man die natürlich retten:

1
2
3
4
5
$ ext="${name##*.}"
$ echo "$ext"
pdf
$ echo "${name% - *}.$ext"
Dokument - Finanzen.pdf

Vorsicht ist geboten, wenn es Dateien gibt, die keine Erweiterung haben.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Ach je,
Du willst ja sed!

Dann so:

1
2
3
$ name="Dokument - Finanzen - 12. Februar 2017.pdf"
$ echo "$name" | sed 's#^\(.*\) - .*\(\.[^.]\+\)$#\1\2#'
Dokument - Finanzen.pdf

darkbrain85

(Themenstarter)

Anmeldungsdatum:
24. April 2017

Beiträge: 2

rklm schrieb:

1
2
3
4
5
$ name="Dokument - Finanzen - 12. Februar 2017.pdf"
$ echo "${name% - *}"
Dokument - Finanzen
$ echo "${name% - *}.pdf"
Dokument - Finanzen.pdf

Wenn die Erweiterungen verschieden sind, muss man die natürlich retten:

1
2
3
4
5
$ ext="${name##*.}"
$ echo "$ext"
pdf
$ echo "${name% - *}.$ext"
Dokument - Finanzen.pdf

Vorsicht ist geboten, wenn es Dateien gibt, die keine Erweiterung haben.

Danke für deinen Ansatz aber leider kann ich damit noch nicht ganz so viel anfangen gerade. Meine software erlaubt mir nur die Eingabe eines regex um einen bestimmten Teil des Namens zu ersetzen bzw. zu löschen.

Vielleicht sehe ich aber auch den Wald nicht...

Edit: Da hast du Dich ja schon selbst "verbessert"... Leider zeigt der regex keinerlei Wirkung....

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

darkbrain85 schrieb:

Danke für deinen Ansatz aber leider kann ich damit noch nicht ganz so viel anfangen gerade. Meine software erlaubt mir nur die Eingabe eines regex um einen bestimmten Teil des Namens zu ersetzen bzw. zu löschen.

Edit: Da hast du Dich ja schon selbst "verbessert"... Leider zeigt der regex keinerlei Wirkung....

Du musst uns schon sagen, um welche Software es sich handelt, wenn Du Hilfe möchtest. Gedankenlesen können wir nicht, und bisher war nur von sed die Rede. Jetzt ist es auf einmal irgendeine Software. Siehe Richtig fragen

Antworten |