Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Expressions regulières //netoyage de fichiers SAMBA

7 réponses
Avatar
Cédric LE BRIS
Bonjour, je cherche des connaisseurs shell:)
En fait je cherche =E0 faire une petite boucle qui passerais en =
r=E9cursif l'ensemble des fichiers
Pour les nettoyer de leur accents et de leus espaces....
Voil=E0 ce que j'ai sous la main pour le moment:
=20
Le probl=E8me c'est qu' j'aimerais passer un test =E0 chaque fichier =
pour voir si chaqe condition est respect=E9e...

rename 's/[=E9=E8=EA=EB]/e/g' "$1"=20
rename 's/[=C8=C9=CA=CB]/E/g' "$1"=20
rename 's/[=E0=E1=E2=E3=E4=E5]/a/g' "$1"=20
rename 's/[=C0=C1=C2=C3=C4=C5]/A/g' "$1"=20
rename 's/[=EF=EE=EC=ED]/a/g' "$1"=20
rename 's/[=CC=CD=CF=CE]/I/g' "$1"=20
rename 's/[=F2=F3=F4=F5=F6]/o/g' "$1"=20
rename 's/[=D2=D3=D4=D5=D6]/O/g' "$1"=20
rename 's/[=F9=FA=FB=FC]/u/g' "$1"=20
rename 's/[=D9=DA=DB=DC]/U/g' "$1"=20
rename 's/[$!?=B5=A3 %]/_/g' "$1"


Si qq a une expression plus propre ;)
Merci

7 réponses

Avatar
Eric DECORNOD
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é
Avatar
Daniel Caillibaud
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
Avatar
Daniel Caillibaud
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
Avatar
Eric DECORNOD
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é
Avatar
Jacques L'helgoualc'h
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
Avatar
Eric DECORNOD
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é
Avatar
pascal
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