Rechercher : dans
Par :

SED : comment remplacer caractere non reconnu

Dernière réponse le 30 avr 2008 à 09:38:44 frantzou69, le 31 mar 2007 à 10:01:15 
 Signaler ce message aux modérateurs

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

Configuration: Linux Ubuntu
Firefox 1.0
shell

Meilleures réponses pour « SED : comment remplacer caractere non reconnu » dans :
Carte mémoire non reconnue (SD, Smartmédia, memory stick, etc.) VoirSi votre ordinateur ne reconnait plus votre carte mémoire, il peut s'agir d'un des problèmes suivants : La carte a été formatée avec un système de fichiers non supporté. Il est nécessaire de la formater en FAT16 : Formater une carte mémoire La...
Disque dur externe USB non reconnu sous Windows VoirSi Windows ne reconnaît pas votre disque dur externe, veuillez vérifier les points suivants : Dans le panneau de configuration : Double-cliquer sur Outils d'administration, Cliquer sur Gestion de l'ordinateur Cliquer sur Gestion des...
[CD-ROM] Lecteur ou graveur CD/DVD non reconnu VoirSi votre lecteur/graveur n'apparaît plus dans le poste de travail (Ordinateur sous Vista), ou bien que vous n'arrivez plus à lire vos CD et/ou vos DVD, voici une astuce qui vous aidera à régler le problème. Vérifier les branchements Si le...

1

lami20j, le 31 mar 2007 à 10:06:56

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? lami20j

Répondre à lami20j

2

frantzou69, le 31 mar 2007 à 10:17:36

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 �

Répondre à frantzou69

3

lami20j, le 31 mar 2007 à 10:24:45

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. lami20j

Répondre à lami20j

4

jipicy, le 31 mar 2007 à 10:28:25

Salut,

echo "remplacer le charactère \",\"" par , | sed 's/\x2C/virgule/2'

remplacer le charactère "," par virgule
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

5

lami20j, le 31 mar 2007 à 10:30:19

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 :-) lami20j

Répondre à lami20j

6

frantzou69, le 31 mar 2007 à 10:33:41

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.

Répondre à frantzou69

7

frantzou69, le 31 mar 2007 à 10:37:31

Merci pour vos suggestions, je vais essayer avec le caractere hexa

Répondre à frantzou69

8

frantzou69, le 31 mar 2007 à 10:45:38

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 !

Répondre à frantzou69

9

lami20j, le 31 mar 2007 à 10:48:51

$ 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
lami20j

Répondre à lami20j

10

frantzou69, le 31 mar 2007 à 11:12:19

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

Répondre à frantzou69

11

lami20j, le 31 mar 2007 à 11:24:17

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
lami20j

Répondre à lami20j

12

frantzou69, le 31 mar 2007 à 11:30:00

J'ai trouvé un site qui donne le codage automatiquement

http://people.w3.org/rishida/scripts/uniview.fr/conversion.h­tml

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

Répondre à frantzou69

13

frantzou69, le 31 mar 2007 à 12:07:08

Voilà une archive contenant 2 fichiers concernes
Merci
http://s188762010.onlinehome.fr/archive.tar

Répondre à frantzou69

14

lami20j, le 31 mar 2007 à 14:16:01

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é. lami20j

Répondre à lami20j

15

frantzou69, le 31 mar 2007 à 14:25:58

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

Répondre à frantzou69

16

frantzou69, le 31 mar 2007 à 14:33:06

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 ?

Répondre à frantzou69

17

lami20j, le 31 mar 2007 à 14:51:00

Que t'affiche cette commande

ls -x -Q -R | perl -ne 's/\x{FFFD}/X/g;print'

lami20j

Répondre à lami20j

18

lami20j, le 31 mar 2007 à 14:55:24

Sinon celle ci

ls -x -Q -R | perl -ne 's/\u{FFFD}/X/g;print'
lami20j

Répondre à lami20j

19

frantzou69, le 31 mar 2007 à 14:56:13

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"

Répondre à frantzou69

20

frantzou69, le 31 mar 2007 à 15:05:34

"---------- 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

Répondre à frantzou69