SED : comment remplacer caractere non reconnu
Résolu
frantzou69
Messages postés
21
Statut
Membre
-
madjpm -
madjpm -
Help
merci pour ce site très pratique, pouvez-vous m'aider ?
j'ai fait un script pour eliminer tous les caracteres non ascci d'un nom de fichier et je n'arrive pas à eliminer celui-ci '?' car je ne peux pas le nommer explicitement, il est alors remplacé par '/' que je ne veux pas non plus.
QUESTION : y a-t-il une option pour que "sed" transforme les caracteres non reconnus en un caractere que je lui designe ?
merci infiniment
Frantzou
merci pour ce site très pratique, pouvez-vous m'aider ?
j'ai fait un script pour eliminer tous les caracteres non ascci d'un nom de fichier et je n'arrive pas à eliminer celui-ci '?' car je ne peux pas le nommer explicitement, il est alors remplacé par '/' que je ne veux pas non plus.
QUESTION : y a-t-il une option pour que "sed" transforme les caracteres non reconnus en un caractere que je lui designe ?
merci infiniment
Frantzou
Configuration: Linux Ubuntu Firefox 1.0 shell
32 réponses
- 1
- 2
Suivant
-
Voici un outil qui fait ça tout seul :
convmv --notest -r -f latin1 -t utf-8 *
Si vous etes sur debian comme moi il suffit d'un petit :
apt-get install convmv
Pour l'installer ! -
$ echo "remplacer le charactère \"é\"" par é | sed 's/\xE9/e/' remplacer le charactère "e" par é
mets ton fichier sur cjoint.com
c'est possible que le codage est fait sur plusieurs octets
-
"---------- 1 1 0 Feb 18 2005 0316248C:003495F4:4216248B les br\350ves"
ça c'est le nm d'un fichier (dans l'archive, je l'ai renommé en ne gardant que la fin du nom avec le caractere qui pose probleme (celui qui donne ici \350)
car les espaces et les deux points ne permettent pas facilement d'utiliser tar en ligne de commande
c'est le \350 que je voudrais remplacer maintenenant -
Salut,
tu parles du point d'interrogation ?echo "remplacer ?" | sed s/\?/A/
tu as des caractères ascii étendues dans ta chaîne?
t'es obligé de faire avec sed? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
C'est ce aractere '�' que je ne peux pas modifier et non '?'
je dois utiliser ces fichiers pour des clients MS et pour assurer un pleine compatibilité, je prefer tout passer en ascci, voilà ma commande
#!/bin/sh
for a in `ls -x -Q -R | sed -e s/[é,è,ê,ë,�]/e/g -e s/[' ',:]/-/g -e s/[ö,ô]/o/g -e s/[ù,û,ü]/u/g -e s/[â,à]/a/g -e s/[î,ï]/i/g`
do
echo $a
done;
ça marche pour tout sauf pour � -
Salut,
j'aimerai avoir un de tes fichiers qui contiennent ce caractères (si c'est confidentiel tu peux faire une copie et supprimer tout sauf le mot qui contient le caractère bizarre)
Pourquoi?
Pour trouver le code ascii de ce caractères ce qui nous permettra de l'expoloiter dans une regex. -
Salut,
echo "remplacer le charactère \",\"" par , | sed 's/\x2C/virgule/2' remplacer le charactère "," par virgule
;-))
-
a prioir c'est un 'é' car voici un exemple de nom de fichier :
---------- 1 1 109 Sep 21 2003 086D7AC2:0005453B:3F6D7AC2 06:28 journ�e de la
journée
Linux ne reconnait pas le 'é'
ce sont des fichiers saisis dans un client MS sur un serveur UNIX SCO, puis importés dans linux en FTP car je dois faitre un reprise de donéne avant de fermer ce serveur et remettre à dispo le contenu de cette base Unix dans une base mysql pour des clients MS toujours. -
merci pour vos suggestions, je vais essayer avec le caractere hexa
-
sauf que é n'existe pas en ascii
donc il me faut bien une option de sed pour tout ce qui n'st pas possible de reconnaite (donc de nommer explicitement)
qqun a une idée ? merci ! -
cjoint.com refuse mon fichier, ça doit etre un serveur MS donc incompatibilité avec mes : dans le nom de fichier
par contre en y réfléchissant, ce sont tous les caracteres non ascci qui sont pas reconnus et traduits par � donc, c'est au moment de ma reprise de données que j'ai merdé. je ne devais pas être en UNICODE, mais ça m'a pris du temps j'ai pas trop envie de la refaire
Au lieu de chercher a renommer ces fichiers, je pense que je vai laisser le nom comme ça et reprendre le contenu dans une base mySQL (c'était mon but de départ) et comme à l'intérieur du fchier les noms sont conformes je n'aurai plus besoin des noms de fichier ensuite.
Voilà, merci pour l'aide quand même, dommage que je n'ai pas trouvé cette option de SED qui me permettrait de remplacer par un caractere que je choisirais tout caractere non reconnu, peut-être que cette option n'existe pas.
Merci à tous pour l'aide
Frantzou -
Et ça?
lami20j@debian:~$ echo àáâãäå | sed 's/[\xE0\-\xE5]/a/g' aaaaaa lami20j@debian:~$ echo èéêë | sed 's/[\xE8\-\xEB]/e/g' eeee
mais comme je t'ai dit c'est le codage qui compte
si je n'ai pas une partie de ton fichier pour pouvoir l'étudier je ne peux rien faire
le fait que tu copie la ligne ici ça ne sers a rien, j'ai besoin de contenu effectif
-
J'ai trouvé un site qui donne le codage automatiquement
http://people.w3.org/rishida/scripts/uniview.fr/conversion.html
voilà ce qu'il me donne pour ce caractère bizarre
Caractere : �
Hexa : FFFD
UTF-8 : EF BF BD
UTF-16 : FFFD
Appel de cacaracteres numeriques Hex : �
Appel de cacaracteres numeriques décimaux : �
je vai essayer tes 2 suggestions en attendant
+ merci -
-
http://www.pasteur.fr/~llafitte/Docs/HTML_4.0/sgml/entities.html
Le caractère de code 65533 (FFFD en hexa) est le dernier valide de l'UCS-2. 65534 (FFFE en hexa) est non assigné et réservé au titre de version inversée (en termes d'octets) de l'ESPACE INSECABLE DE LARGEUR ZERO pour des besois de détection de l'ordonnancement des octets. 65535 (FFFF en hexa) est non assigné. -
si quelqu'un peut récupérer cette archive http://s188762010.onlinehome.fr/archive.tar
les 2 fichiers q'elle contient sont des exemples des fichiers dont je veux automatiser le changement de nom .
Le caracteère inconnu qu'ils contiennet est une interpretation de caracteres non ascii, et je voudrais m'en débarrasser, je n'y arrive pas avec SED pourtant il s'agit en hexa du caractere : FFFD , et si je le fais avec la suhggestion de lami20j, je récupere le caracteres suivants
\342 pour le a accent circonflex
\351 pour le e accent aigu
\\350 pour e accent grave etc...
Voici la commande
ls -x -Q -R | sed -e s/\xFFFD/X/g
merci pour votre aide
la commande totale
for a in `ls -x -Q -R | sed -e s/\xFFFD/X/g -e s/[ö,ô]/o/g -e s/[ù,û,ü]/u/g -e s/[â,à]/a/g -e s/[î,ï]/i/g -e s/[' ',':',',',';']/-/g`
do
echo $a
Frantzou -
merci lami20j pour ces précisions, mais est-ce à dire que derrière ce petit icône en forme de point d'interrogation, tu peux trouver différents caracteres e que je peux les décoder ? donc je tiens peut-être une piste ?
-
Que t'affiche cette commande
ls -x -Q -R | perl -ne 's/\x{FFFD}/X/g;print'
-
sinon celle ci
ls -x -Q -R | perl -ne 's/\u{FFFD}/X/g;print' -
ceci :
francis@francis-laptop:~/Desktop/test$ ls -x -Q -R | perl -ne 's/\x{FFFD}/X/g;print'
".":
"---------- 1 1 0 Feb 18 2005 0316248C:003495F4:4216248B les br\350ves"
"---------- 1 1 0 Feb 21 2005 0A19EEA6:0035B6A1:4219EEA6 le funiculaire en r\351"
"---------- 1 1 0 Feb 21 2005 0C19EEA6:000D91F2:4219EEA6 plus s\373r"
"---------- 1 1 105 Sep 26 2003 08741EC6:001AA4B6:3F741EC6 04:05 ille-et-vilain"
"---------- 1 1 107 Sep 22 2003 156ED90F:00256FB0:3F6ED90F 5:44 une nouvelle vi"
"---------- 1 1 107 Sep 24 2003 02717D19:0001257C:3F717D18 17:00 cent millions"
"---------- 1 1 108 Sep 19 2003 086AEB2D:0004EECA:3F6AEB2D 00:52 affaire maalem"
"---------- 1 1 108 Sep 21 2003 0E6D7AC2:0005453A:3F6D7AC2 04:02 distribution d"
"---------- 1 1 108 Sep 21 2003 126D7AC2:00054539:3F6D7AC2 6:20 r\351habilitation"
"---------- 1 1 108 Sep 23 2003 19703027:000276A2:3F703027 10:15 des locaux fla"
"---------- 1 1 109 Sep 21 2003 086D7AC2:0005453B:3F6D7AC2 06:28 journ\351e de la"
"---------- 1 1 109 Sep 22 2003 106ED90F:00256FA6:3F6ED90F 01:00c'est tjrs l'\351t"
"---------- 1 1 120 Mar 02 2005 3225D17D:000E3939:4225D17C 14:28 r\351ouverture du"
"---------- 1 1 165 Feb 24 2005 0A1DEC1A:003607CD:421DEC19 d\351couverte : ch\342teau"
"---------- 1 1 35 Feb 16 2005 2E136478:00153EDC:4213A00B 5:30 pol\351mique h\364pit"
"---------- 1 1 35 Feb 24 2005 061DEC1A:0015FED8:421DEC19 6:02 apr\350s versaill"
- 1
- 2
Suivant