ubuntuusers.de

Perl rename 'i'-modifier (case-insensitive) funktioniert nicht

Status: Gelöst | Ubuntu-Version: 14.04 (Trusty Tahr)
Antworten |

Ludovici

Avatar von Ludovici

Anmeldungsdatum:
20. Mai 2012

Beiträge: Zähle...

Wohnort: Lörrach, Stadt der Schokolade

Guten Abend,

ich zweifle etwas an meinem Verstand und befürchte eine peinlich einfache Antwort aber ich ärgere mich schon seit ein paar Stunden mit einem kleinen Problem herum, dessen Lösung ich auch nach intensiever Websuche ich nicht näher kam:

Aufgabe: die Datei Ä_ä.pdf in ae_ae.pdf umbenennen. (Das ist natürlich nur eine Beispieldatei, es handelt sich um eine große zu bearbeitende Datenmenge.

Die vermeintliche Lösung wäre "rename" mit dem global-Modifier und dem case-insensitive-Modifier:

rename 's/ä/ae/gi' Ä_ä.pdf

Das Ergebnis ist jedoch: Ä_ae.pdf. Der i-Modifier wird konsequent ignoriert, ich bekomme die Groß-Klein-Schreibung einfach nicht ignoriert. Der g-Modifier dagegen tut seinen Dienst wie er es soll und wie es hier im Wiki oder in den man pages steht....

Könnt ihr das bestätigen? Hab ich was übersehen?? Irgendwelche Ideen???

Liebe Grüße&gute Nacht, Ludovici

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Ich würde raten, dass das Programm nicht weiß, dass Ä ein großes ä ist.

Klappt es so:

1
2
3
rename 's/[Ää]/ae/g' Ä_ä.pdf
# oder so:
rename 's/Ä|ä/ae/g' Ä_ä.pdf

Ludovici

(Themenstarter)
Avatar von Ludovici

Anmeldungsdatum:
20. Mai 2012

Beiträge: 8

Wohnort: Lörrach, Stadt der Schokolade

Auf die Idee bin ich ja gar nicht gekommen! Aber du hast wohl recht... kann ja nicht jeder wissen, welche seltsamen Umlaute man wie schreibt 😉 Jedenfalls funktioniert deine zweite vorgeschlagene Lösung mit dem |-Oder-Operator:

1
2
3
4
5
rename 's/[Ää]/ae/g' Ä_ä.pdf
# Ergibt: aeae_aeae.pdf

rename 's/Ä|ä/ae/g' Ä_ä.pdf
# Ergibt: ae_ae.pdf

Vielen Dank!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Mein Rename ist ein perl-Rename aber bei Xubuntu 12.04, und es meldet:

1
2
3
rename --help
Unknown option: help
Usage: rename [-v] [-n] [-f] perlexpr [filenames]

Von einer -i - Option steht da gar nichts. Ist das bei 14.04 anders?

Ludovici

(Themenstarter)
Avatar von Ludovici

Anmeldungsdatum:
20. Mai 2012

Beiträge: 8

Wohnort: Lörrach, Stadt der Schokolade

Morgen!

Das liegt daran, dass es sich nicht um eine Option, sondern um einen modifier als Teil der "Regulären Ausdrücke" in perl handelt. Siehe Perlre(gex). So steht's auch im Wiki. Allerdings seht's nicht (hatte ich falsch im Kopf im ersten Post) direkt in der sehr kurz gehaltenen rename man page.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Ja, meine Verschusselung. Bei sed gibt es einen -i - Schalter, und ich nutze viel öfter sed als rename - die Ausdrücke sind aber sehr ähnlich.

Überraschend für mich auch, dass eckige Klammern nicht gehen.

1
2
3
4
5
6
rename -n 's/[aeiou]/y/g' h?t.txt 
hat.txt renamed as hyt.txt
het.txt renamed as hyt.txt
hit.txt renamed as hyt.txt
hot.txt renamed as hyt.txt
hut.txt renamed as hyt.txt

Bei mir scheint es zu gehen. Allerdings nicht richtig mit Umlauten:

1
2
3
4
rename -n 's/[ÄÜÖ]/ye/ig' h?t.txt 
hät.txt renamed as hye�t.txt
höt.txt renamed as hye�t.txt
hüt.txt renamed as hye�t.txt

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

Ludovici, warum nimmst Du auch Perl?

$ ruby -e 'p "Ää".gsub(/ä/i, "X")'
"XX" 

😛

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

user unknown schrieb:

Bei mir scheint es zu gehen. Allerdings nicht richtig mit Umlauten:

1
2
3
4
rename -n 's/[ÄÜÖ]/ye/ig' h?t.txt 
hät.txt renamed as hye�t.txt
höt.txt renamed as hye�t.txt
hüt.txt renamed as hye�t.txt

... ach ja, diese Tücke mit Perl und utf-8 🤓
Die erstmal nicht vorhandene utf-8 - Unterstützung von Perl führt immer wieder zu Überraschungen. 😀

(so mal als späten Nachtrag angemerkt ...)

track

Antworten |