Script de remplacement de caractères
Le
Vincent Ramos

Bonsoir,
J'ai tenté d'écrire ce soir (ou matin, comme on voudra) mon premier
script en bash. Vu que je débute, je ne connais que très peu sa
syntaxe. J'ai conscience qu'il est mal parti ainsi et viens demander
de l'aide.
J'aimerais qu'il transforme un fichier texte codé en utf-8 en latin-1
tout en transcrivant les caractères qui n'appartiennent pas à latin-1
en entités numériques html.
Malheureusement, ce script serait très laid tel quel :
#!/bin/sh
replace é _eaigu ê _ecirc < essai.txt > essai2.txt
#Vu que je compte me servir de recode, il me faut protéger les
caractères qui existent déjà en latin-1 pour l'empêcher de les
transformer en entités. Je veux qu'ils restent en brut. Pour ce
faire, je les remplace par des fausses entités. C'est là que le bât
blesse : si je dois entrer à la main tous les caractères non ASCII de
latin-1, cela risque d'être très fastidieux. Je cherche à automatiser
ce processus, sachant que tous ces caractères sont compris entre
U+00A1 et U+00FF. De même, pour les alias, il serait possible de
définir un nom avec une variable qui serait incrémentée à chaque fois
qu'un nouveau caractère étendu serait rencontré. Par exemple, si le
fichier contient seulement de /é/, /è/ et /à/, on aurait _carac1,
_carac2, _carac3. De toutes ces idées, je ne sais en appliquer
aucune
recode ..h essai2.txt
#Une fois les caractères de U+00A1 à U+00FF protégés, je peux recoder
le fichier sans problème depuis utf-8 à html-4.
replace _eaigu é _ecirc ê < essai2.txt > essai3.txt
#Là, je retranscris mes alias en caractères bruts à partir de
essai2.txt. Je me suis rendu compte que si je tentais de garder un
seul fichier, j'obtenais en sortie un fichier vide. Je dois donc
utiliser à chaque opération un fichier différent.
recode h..latin1 essai3.txt
#Si je veux vraiment du latin-1. Comme mon but est de convertir des
fichiers pour des articles sur Wikipédia, le copier-coller depuis le
fichier dans une zone de texte du navigateur m'évite d'avoir à faire
cela.
mv essai3.txt essai.txt
#J'écrase le fichier de départ avec le nouveau.
rm essai?.txt
#J'efface les fichiers de transit.
Bon, comme vous le voyez, je suis loin d'arriver à un résultat
probant. Pour l'instant, cela marche avec les /é/ et les /ê/ mais ce
procédé me semble laid.
J'ai tenté d'utiliser tr, auquel on peut fournir des plages de
caractères, mais en vain. De plus, on m'a dit qu'avec Perl c'était
très facile. Je préfèrerais utiliser bash, pour en apprendre un peu
plus.
Merci de tout conseil,
Vincent
--
Je participe au projet Wikipédia <http://fr.wikipedia.org/>, et vous ?
<http://fr.wikipedia.org/wiki/Utilisateur:Vincent_Ramos>
J'ai tenté d'écrire ce soir (ou matin, comme on voudra) mon premier
script en bash. Vu que je débute, je ne connais que très peu sa
syntaxe. J'ai conscience qu'il est mal parti ainsi et viens demander
de l'aide.
J'aimerais qu'il transforme un fichier texte codé en utf-8 en latin-1
tout en transcrivant les caractères qui n'appartiennent pas à latin-1
en entités numériques html.
Malheureusement, ce script serait très laid tel quel :
#!/bin/sh
replace é _eaigu ê _ecirc < essai.txt > essai2.txt
#Vu que je compte me servir de recode, il me faut protéger les
caractères qui existent déjà en latin-1 pour l'empêcher de les
transformer en entités. Je veux qu'ils restent en brut. Pour ce
faire, je les remplace par des fausses entités. C'est là que le bât
blesse : si je dois entrer à la main tous les caractères non ASCII de
latin-1, cela risque d'être très fastidieux. Je cherche à automatiser
ce processus, sachant que tous ces caractères sont compris entre
U+00A1 et U+00FF. De même, pour les alias, il serait possible de
définir un nom avec une variable qui serait incrémentée à chaque fois
qu'un nouveau caractère étendu serait rencontré. Par exemple, si le
fichier contient seulement de /é/, /è/ et /à/, on aurait _carac1,
_carac2, _carac3. De toutes ces idées, je ne sais en appliquer
aucune
recode ..h essai2.txt
#Une fois les caractères de U+00A1 à U+00FF protégés, je peux recoder
le fichier sans problème depuis utf-8 à html-4.
replace _eaigu é _ecirc ê < essai2.txt > essai3.txt
#Là, je retranscris mes alias en caractères bruts à partir de
essai2.txt. Je me suis rendu compte que si je tentais de garder un
seul fichier, j'obtenais en sortie un fichier vide. Je dois donc
utiliser à chaque opération un fichier différent.
recode h..latin1 essai3.txt
#Si je veux vraiment du latin-1. Comme mon but est de convertir des
fichiers pour des articles sur Wikipédia, le copier-coller depuis le
fichier dans une zone de texte du navigateur m'évite d'avoir à faire
cela.
mv essai3.txt essai.txt
#J'écrase le fichier de départ avec le nouveau.
rm essai?.txt
#J'efface les fichiers de transit.
Bon, comme vous le voyez, je suis loin d'arriver à un résultat
probant. Pour l'instant, cela marche avec les /é/ et les /ê/ mais ce
procédé me semble laid.
J'ai tenté d'utiliser tr, auquel on peut fournir des plages de
caractères, mais en vain. De plus, on m'a dit qu'avec Perl c'était
très facile. Je préfèrerais utiliser bash, pour en apprendre un peu
plus.
Merci de tout conseil,
Vincent
--
Je participe au projet Wikipédia <http://fr.wikipedia.org/>, et vous ?
<http://fr.wikipedia.org/wiki/Utilisateur:Vincent_Ramos>
konwert fait ça, il devrait bien exister pour ta distribution.
PS : tu es sur le mauvais forum !
nicolas patrois : pts noir asocial
--
GLOU-GLOU
P : Ouerk ! C'est dégueulasse, j'ai bu la tasse !
M : Panique pas... La mer est pleine de microbes, mais tellement dilués qu'ils sont inoffensifs...
P : C'est ça... La mer, c'est de la merde homéopathique !
D'accord. Bon, il y a un problème de dépendances, mais apparemment,
c'est ce qu'il me faut.
Ah. Dans ce cas, quel est le bon ?
Merci,
Vincent
Bon, j'ai trouvé, et c'est très simple :
recode -i ..html recode -d -i html..u8
Voilà...
Ta distro ne sait pas gérer ça ?
Euh, cherche dans fr.comp, je n'ai pas de nom. M'enfin ce n'est pas grave,
tu as eu une réponse.
nicolas patrois : pts noir asocial
--
GLOU-GLOU
P : Ouerk ! C'est dégueulasse, j'ai bu la tasse !
M : Panique pas... La mer est pleine de microbes, mais tellement dilués qu'ils sont inoffensifs...
P : C'est ça... La mer, c'est de la merde homéopathique !