Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2007, 10h53   #1
Invité de passage
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 4
Points : 4
Par défaut Remplacé des caractères UTF8 erronés dans plusieurs fichiers

Bonjour, j'ai rapidement écrit cette commande pour remplacer des caractères UTF8 mal convertis par phpdocumentor :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
for file in $(find ~/www/public/. -type f); do
  sed 's/À/À/g' < $file > $file.tmp
  sed 's/É/É/g' < $file > $file.tmp
  sed 's/é/é/g' < $file > $file.tmp
  sed 's/è/è/g' < $file > $file.tmp
  sed 's/Ã/à/g' < $file > $file.tmp
  sed 's/ä/ä/g' < $file > $file.tmp
  sed 's/ë/ë/g' < $file > $file.tmp
  sed 's/ï/ï/g' < $file > $file.tmp
  sed 's/â/â/g' < $file > $file.tmp
  sed 's/ê/ê/g' < $file > $file.tmp
  echo $file
  rm -f $file
  mv $file.tmp $file
done

mais ça ne semble pas fonctionner. Quelqu'un pourrait me corriger ? (C'est le premier script shell de ma vie).
evaisse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2007, 11h06   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
je ne pense pas que tu puisse t'en sortir avec sed, celui-ci utilise les tables de caractères courante , et donc "interprete".

avec tr (man tr) cela devrait être probablement possible.

sinon le traitement pourrait être réaliser directement avec un outils dedié comme :
iconv
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2007, 23h18   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par evaisse
Bonjour, j'ai rapidement écrit cette commande pour remplacer des caractères UTF8 mal convertis par phpdocumentor :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
for file in $(find ~/www/public/. -type f); do
  sed 's/À/À/g' < $file > $file.tmp
  sed 's/É/É/g' < $file > $file.tmp
  sed 's/é/é/g' < $file > $file.tmp
  sed 's/è/è/g' < $file > $file.tmp
  sed 's/Ã/à/g' < $file > $file.tmp
  sed 's/ä/ä/g' < $file > $file.tmp
  sed 's/ë/ë/g' < $file > $file.tmp
  sed 's/ï/ï/g' < $file > $file.tmp
  sed 's/â/â/g' < $file > $file.tmp
  sed 's/ê/ê/g' < $file > $file.tmp
  echo $file
  rm -f $file
  mv $file.tmp $file
done

mais ça ne semble pas fonctionner. Quelqu'un pourrait me corriger ? (C'est le premier script shell de ma vie).


Comme l'indique MarcG, tu peux utiliser iconv comme ceci :

Code :
1
2
3
4
5
6
7
 
for file in $(find ~/www/public/. -type f); do
  iconv -f utf-8 -t ISO-8859-1 $file > ${file}.tmp 
  echo $file
  rm -f $file
  mv ${file}.tmp $file
done

En tout cas, ton sed posait problème, format OK :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
for file in $(find ~/www/public/. -type f); do
  sed -e 's/À/À/g' \
        -e  's/É/É/g' \
        -e 's/é/é/g' \
        -e  's/è/è/g' \
       (...)
        -e 's/ê/ê/g' < $file > $file.tmp
  echo $file
  rm -f $file
  mv $file.tmp $file
done
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h45.


 
 
 
 
Partenaires

Hébergement Web