Expressions regulières //netoyage de fichiers SAMBA

Le
Cédric LE BRIS
Bonjour, je cherche des connaisseurs shell:)
En fait je cherche à faire une petite boucle qui passerais en =
récursif l'ensemble des fichiers
Pour les nettoyer de leur accents et de leus espaces.
Voilà ce que j'ai sous la main pour le moment:

Le problème c'est qu' j'aimerais passer un test à chaque fichier =
pour voir si chaqe condition est respectée

rename 's/[éèêë]/e/g' "$1"
rename 's/[ÈÉÊË]/E/g' "$1"
rename 's/[àáâãäå]/a/g' "$1"
rename 's/[ÀÁÂÃÄÅ]/A/g' "$1"
rename 's/[ïîìí]/a/g' "$1"
rename 's/[ÌÍÏÎ]/I/g' "$1"
rename 's/[òóôõö]/o/g' "$1"
rename 's/[ÒÓÔÕÖ]/O/g' "$1"
rename 's/[ùúûü]/u/g' "$1"
rename 's/[ÙÚÛÜ]/U/g' "$1"
rename 's/[$!?µ£ %]/_/g' "$1"


Si qq a une expression plus propre ;)
Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric DECORNOD
Le #9531371
Le jeudi 19 avril 2007 11:06, Cédric LE BRIS a écrit :
Bonjour, je cherche des connaisseurs shell:) [...]


s/shell/perl/

rename 's/[éèêë]/e/g' "$1"
rename 's/[ÈÉÊË]/E/g' "$1"
rename 's/[àáâãäå]/a/g' "$1"
rename 's/[ÀÁÂÃÄÅ]/A/g' "$1"
rename 's/[ïîìí]/a/g' "$1"
rename 's/[ÌÍÏÎ]/I/g' "$1"
rename 's/[òóôõö]/o/g' "$1"
rename 's/[ÒÓÔÕÖ]/O/g' "$1"
rename 's/[ùúûü]/u/g' "$1"
rename 's/[ÙÚÛÜ]/U/g' "$1"
rename 's/[$!?µ£ %]/_/g' "$1"
Si qq a une expression plus propre ;)
Merci


tr/èêëÈÉÊËàáâãäåÀÁÂÃÄÅïîìíÌ ÍÏÎòóôõöùúûüÙÚÛÜ$!?µ£ %/eeeeEEEEaaaaaaA AAAAAiiiiIIIIooooouuuuUUUU_______/

c.f. :
http://perldoc.perl.org/perlop.html#tr/SEARCHLIST/REPLACEMENTLIST/cds-tr-y- transliterate-/c-/d-/s

sinon mais je suis pas sur :
rename '
s/[=a=]/a/g;
s/[=A=]/A/g;
s/[=e=]/e/g;
s/[=E=]/E/g;
...
' "$1"

Cordialement,
--
Eric DÉCORNOD
Ingénieur d'Études
SCICS - Faculté des Sciences
Université Henri Poincaré
Daniel Caillibaud
Le #9531351
Cédric LE BRIS a écrit :
Bonjour, je cherche des connaisseurs shell:)
En fait je cherche à faire une petite boucle qui passerais en récursif l'ensemble des fichiers
Pour les nettoyer de leur accents et de leus espaces....
Voilà ce que j'ai sous la main pour le moment:

Le problème c'est qu' j'aimerais passer un test à chaque fichier pour voir si chaqe condition est respectée...



rename -n ...

rename 's/[éèêë]/e/g' "$1"
rename 's/[ÈÉÊË]/E/g' "$1"
rename 's/[àáâãäå]/a/g' "$1"
rename 's/[ÀÁÂÃÄÅ]/A/g' "$1"
rename 's/[ïîìí]/a/g' "$1"
rename 's/[ÌÍÏÎ]/I/g' "$1"
rename 's/[òóôõö]/o/g' "$1"
rename 's/[ÒÓÔÕÖ]/O/g' "$1"
rename 's/[ùúûü]/u/g' "$1"
rename 's/[ÙÚÛÜ]/U/g' "$1"
rename 's/[$!?µ£ %]/_/g' "$1"



Pour cette dernière, je listerait plutôt tous les caractères acceptés et remplacerait le reste par _, du genre
rename 's/[^a-zA-Z0-9-_ ]/_/g' "$1"
puis virer éventuellement les _ doublés
rename 's/__/_/g' "$1"

Mais tu vas avoir un pb, car seul la 1re modif va marcher, pour les suivantes, $1 aura changé...

Je te conseillerais plutôt d'utiliser sed pour tout faire en 1 fois, genre
new=$(echo $1 | sed -e 's/[éèêë]/e/g; s/[ÈÉÊË]/E/g; ... ; s/[^a-zA-Z0-9-_ ]/_/g; s/__/_/g')

ou mieux avec
new=$(echo "$1"|sed -e 'y/áàâäçéèêëíìîïñóòôöúùûü ÁÀÂÄÇÉÈÊËÍÌÎÏÑÓÒÔÖÚÙÛÜ/aaaaceeeeiiiinoooouuuu_aaaaceeeeiiiinoooouuuu/; s/[^a-zA-Z0-9-_ ]/_/g; s/__/_/g')
# Attention, la ligne ci-dessus vire les majuscules et les espaces, je te laisse corriger
if ( "$new" != "$1")
then
echo "Renommer '$1' en '$new' ?"
read rep
[ $rep == 'o' ] && mv "$1" "$new" && echo "renommage OK"
fi

tr 'y/chars/chars/' marche aussi si tu n'es pas en utf8.

Daniel


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Daniel Caillibaud
Le #9531341
Eric DECORNOD a écrit :
tr/èêëÈÉÊËàáâãäåÀÁÂÃÄÅïîìíÌÍÏÎòóôõöùúûüÙÚÛÜ$!?µ£ %/eeeeEEEEaaaaaaAAAAAAiiiiIIIIooooouuuuUUUU_______/



Attention à l'utf8, cf http://www.opengroup.org/onlinepubs/009695399/utilities/tr.html (merci à Vincent Lefevre)

Daniel


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Eric DECORNOD
Le #9531301
Le jeudi 19 avril 2007 13:13, Daniel Caillibaud a écrit :
Eric DECORNOD a écrit :
> tr/èêëÈÉÊËàáâã äåÀÁÂÃÄÅïîìíà ŒÃÃÃŽÃ²Ã³Ã´ÃµÃ¶Ã¹ÃºÃ»Ã¼ ÙÚÛÜ$!?µ£
> %/eeeeEEEEaaaaaaAAAAAAiiiiIIIIooooouuuuUUUU_______/
Attention à l'utf8, cf
http://www.opengroup.org/onlinepubs/009695399/utilities/tr.html (merci à
Vincent Lefevre)
Daniel


/usr/bin/rename n'utilise pas /usr/bin/tr, mais la fonction eval() de perl.

Pour que Perl respecte le utf8 dans LANG,
il faut définir la variable d'environnement PERL_UNICODE=SDAL

Quand on est en utf-8, il y a mieux :
# apt-get install libtext-unidecode-perl
$ PERL_UNICODE=SDA perl -MText::Unidecode -pe 'unidecode($_)' <<< cö tÖnÉфЛЯ
cotOnEfLIa

par exemple:
ls -1 | PERL_UNICODE=SDA
perl -MText::Unidecode -ne 'rename $_, unidecode($_) or warn "$! : $_"'

Cordialement,
--
Eric DÉCORNOD
Ingénieur d'Études
SCICS - Faculté des Sciences
Université Henri Poincaré
Jacques L'helgoualc'h
Le #9531281
Eric DECORNOD a écrit, jeudi 19 avril 2007, à 11:48 :
Le jeudi 19 avril 2007 11:06, Cédric LE BRIS a écrit :
> Bonjour, je cherche des connaisseurs shell:) [...]
s/shell/perl/

> rename 's/[éèêë]/e/g' "$1"


[...]
tr/èêëÈÉÊËàáâãäåÀÁÂÃÄÅïîìíÌÍÏÎòóôõöùúûüÙÚÛÜ$!?µ£ %/eeeeEEEEaaaaaaAAAAAAiiiiIIIIooooouuuuUUUU_______/




Pour l'espace, j'utiliserais plutôt « s/s/_/g » (ou [[:space:]] avec Sed).

sinon mais je suis pas sur :
rename '
s/[=a=]/a/g;


[...]

$ echo éêè | perl -pe 's/[=e=]/e/g'
POSIX syntax [= =] is reserved for future extensions in regex;
marked by <-- HERE in m/[=e=] <-- HERE / at -e line 1.

Ce n'est encore qu'une promesse (sous Sarge)...
--
Jacques L'helgoualc'h


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Eric DECORNOD
Le #9531271
Le jeudi 19 avril 2007 15:23, Jacques L'helgoualc'h a écrit :
Eric DECORNOD a écrit, jeudi 19 avril 2007, à 11:48 :
[...]
> sinon mais je suis pas sur :
> rename '
> s/[=a=]/a/g;
[...]
$ echo éêè | perl -pe 's/[=e=]/e/g'
POSIX syntax [= =] is reserved for future extensions in regex;
marked by <-- HERE in m/[=e=] <-- HERE / at -e line 1.
Ce n'est encore qu'une promesse (sous Sarge)...
--
Jacques L'helgoualc'h


<troll>
J'ai vu, ;-(... encore un vaporware, comme utf8 facile pour tous.
</troll>

A avoir quinze moteurs de regexp différents on ne sait plus qui correspon d à
quoi... « The POSIX character classes [.cc.] and [Ì=] are recogni zed but
not supported and trying to use them will cause an error. »
Désolé pour les indications foireuses, j'espère m'être rattrapé a vec
Text:Unidecode.

J'ai même fini par ré-écrire Text::Unidecode en Java tellement cette fonction
me manque en général...

PS+HS : en parlant de troll, j'ai été surpris de l'extraordinaire mod ération
dans le fil « zsh vs bash » de lundi. J'attendais un peu de spectac le ;-)
(les basheux auraient-ils disparu ?)

Cordialement,
--
Eric DÉCORNOD
Ingénieur d'Études
SCICS - Faculté des Sciences
Université Henri Poincaré
pascal
Le #9531131
Eric DECORNOD a écrit :

PS+HS : en parlant de troll, j'ai été surpris de l'extraordinaire modération
dans le fil « zsh vs bash » de lundi. J'attendais un peu de spectacle ;-)
(les basheux auraient-ils disparu ?)



Mais...mais quel jour sommes-nous ?
Ha oui d'accord.

Trop gros...Passera pas.

Cordialement,


De même
P.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Publicité
Poster une réponse
Anonyme