Posez votre question Signaler

SED : comment remplacer caractere non reconnu [Résolu]

frantzou69 21Messages postés 31 mars 2007Date d'inscription - Dernière réponse le 24 déc. 2009 à 14:38
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
Lire la suite 

SED : comment remplacer caractere non reconnu »

33 réponses
Réponse
+1
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Réponse
+0
moins plus
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 �
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
echo "remplacer le charactère \",\"" par , | sed 's/\x2C/virgule/2'

remplacer le charactère "," par virgule
;-))
lami20j- 31 mars 2007 à 10:30
Salut,

c'est pour ça que j'ai posé la question :-)
je ne savais pas qu'on peut utiliser la representation hexa avec sed & regex

il lui reste à trouver la répresentation hexa de son caractère pour le remplacer :-)
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
merci pour vos suggestions, je vais essayer avec le caractere hexa
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
$ 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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Voilà une archive contenant 2 fichiers concernes
Merci
http://s188762010.onlinehome.fr/archive.tar
Ajouter un commentaire
Réponse
+0
moins plus
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é.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
Que t'affiche cette commande
ls -x -Q -R | perl -ne 's/\x{FFFD}/X/g;print'

Ajouter un commentaire
Réponse
+0
moins plus
sinon celle ci
ls -x -Q -R | perl -ne 's/\u{FFFD}/X/g;print'
Ajouter un commentaire
Réponse
+0
moins plus
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"
Ajouter un commentaire
Réponse
+0
moins plus
"---------- 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
Ajouter un commentaire
Ce document intitulé « SED : comment remplacer caractere non reconnu » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
SED : comment remplacer caractere non reconnu - page 2