#1 Le 12/02/2010, à 22:35
- soupaloignon
[résolu] script bash pour remplacer caracteres accentués par du html
Bonjour à tous,
Moitié par utilité et moitié pour le fun j'essaye de coder un script me permettant de transformer une phrase comportant des caractères accentués en une phrase comportant leurs équivalence html.
ex : Bonne journée = Bonne journée
L'idée c'est de rentrer la phrase dans une zenity --entry et ensuite récupérer cette phrase dans sed et lui faire les substitutions pour ensuite renvoyer le résultat dans une zenity --info (ou dans le presse papier)
J'ai codé quelque chose, mais bon, je le montre pas tellement c'est naze . Je suis quand même pas loin du résultat, sauf que je bloque sur 1 truc :
Lorsque je fais un
sed 's/à/à/'
le résultat est
àagrave;
. Il ne prend pas en compte le &. J'ai essayé d'échapper avec des " et des ', mais sans résultat.
Donc la question : Comment échapper cela pour conserver la forme finale ?
Merci d'avance pour vos réponses
Dernière modification par soupaloignon (Le 13/02/2010, à 01:03)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#2 Le 12/02/2010, à 23:26
- AnsuzPeorth
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Bjr,
echo "là" | sed 's/à/\à/'
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#3 Le 12/02/2010, à 23:52
- soupaloignon
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Je venais poster un message avec le résultat que j'ai trouvé à force de tester des trucs ds tous les sens. Et effectivement c'est bien un "\" pour échapper. Merci AnsuzPeorth
Voilà ce que j'obtiens pour le moment, il y a certainement moyen de simplifier ou d'optimiser. Si vous avez des idées
De mon coté j'en ai, mais sans savoir les réaliser :
Il doit y avoir moyen d'envoyer directement la variable $phrase dans sed, sans passer par un fichier
De même le résultat pour être envoyé directement dans une zenity info (sans passer par le fichier testsed1) ou direct dans le presse papier.
#! /bin/bash
phrase=`zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text ""`
fichier="testsed"
echo $phrase > $fichier
sed 's/à/\à/' $fichier | \
sed 's/â/\â/' | \
sed 's/ä/\ä/' | \
sed 's/ç/\ç/' | \
sed 's/è/\è/' | \
sed 's/é/\é/' | \
sed 's/ê/\ê/' | \
sed 's/ë/\ë/' | \
sed 's/î/\î/' | \
sed 's/ï/\ï/' | \
sed 's/ù/\ù/' | \
sed 's/ü/\ü/' | \
sed 's/û/\û/' > testsed1
gedit testsed1
Dernière modification par soupaloignon (Le 13/02/2010, à 00:08)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#4 Le 13/02/2010, à 00:06
- AnsuzPeorth
Re : [résolu] script bash pour remplacer caracteres accentués par du html
J'avais utilisé un peu pret la meme chose dans un de mes script (l'inverse plus exactement)
function ToHtml ()
{
sed 's/à/\à/g
s/â/\â/g
s/ä/\ä/g
s/ç/\ç/g
s/è/\è/g
s/é/\é/g
s/ê/\ê/g
s/ë/\ë/g
s/î/\î/g
s/ï/\ï/g
s/ù/\ù/g
s/ü/\ü/g
s/û/\û/g'
}
echo $phrase | ToHtml > testsed1
#ToHtml <<< $phrase > testsed1
Sinon il existe un paquet html2text, et text2html qui fait ce travail !
ps:il manque l'espace dans la conversion, et le drapeau g de sed pour modifier toutes les occurences.
Dernière modification par AnsuzPeorth (Le 13/02/2010, à 00:09)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#5 Le 13/02/2010, à 00:15
- soupaloignon
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Sinon il existe un paquet html2text, et text2html qui fait ce travail !
Oui, j'avais vu, mais cela me plaisait d'essayer de coder ça en bash
ps:il manque l'espace dans la conversion, et le drapeau g de sed pour modifier toutes les occurences.
Oups, bien vu
#! /bin/bash
fichier="testsed"
zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" > $fichier
sed -i 's/à/\à/g;s/â/\â/g;s/ä/\ä/g;s/ç/\ç/g;s/è/\è/g;s/é/\é/g;s/ê/\ê/g;s/ë/\ë/g;s/î/\î/g;s/ï/\ï/g;s/ù/\ù/g;s/ü/\ü/g;s/û/\û/g' "$fichier"
gedit "$fichier"
Bien vu, sed n'est lancé qu'une fois. C'est moins lisible, mais bcp plus rapide. Merci
Dernière modification par soupaloignon (Le 13/02/2010, à 00:18)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#6 Le 13/02/2010, à 00:18
- Tomzz
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Bonsoir,
Au risque de casser le côté fun , regarde du coté de xml2asc qui est dispo dans le paquet html-xml-utils , attention ce paquet n'est dispo que depuis Karmic il me semble, pour les versions antérieures voir les sources )
En revanche ça utilise le code numérique et non le texte:
ex : Bonne journée = Bonne journée et en numérique = Bonne journ& # 233;e (sans les espaces, c'est quoi les caractères d'échappement à utiliser sur le forum ?? )
mais pour ce que j'en sais c'est pareil.
Une liste assez exhaustive des entités html
[edit] grillé !! le temps de chercher les liens, AnsuzPeorth à eu la même idée en mieux avec "Sinon il existe un paquet html2text, et text2html".
Dernière modification par Tomzz (Le 13/02/2010, à 00:26)
Hors ligne
#7 Le 13/02/2010, à 00:19
- AnsuzPeorth
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Sinon, pour faire ça (zenity entry et zenity info)
zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" | ToHtml | xargs -I{} zenity --info --text={}
#pour mettre en presse papier
zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" | ToHtml | xclip -i
Dernière modification par AnsuzPeorth (Le 13/02/2010, à 00:20)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#8 Le 13/02/2010, à 00:20
- jlhal
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Bonjour !
Pour obtenir la liste des caractères spéciaux et leur équivalent html , faire simplement une recherche Google avec 'html caracteres speciaux'
ASUS M4N98TD EVO, Xubuntu 11.10 X64 (3.0.0.17), AMD Phenom II X6 1055T, GigaByte GTX590 3Go DDR5
ASUS Sabertooth 990FX, Windows 7 Intégral X64 SP1, AMD FX 8150 , Gainward 560ti Phantom2 2Go + GigaByte GTX460SO 1Go
Hors ligne
#9 Le 13/02/2010, à 00:34
- soupaloignon
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Mouarfff, grillé par AnsuzPeorth
cat "$fichier" | xclip
Au risque de casser le côté fun ,
Justement, je vaux pas le casser, vive le bash (mais merci pour ton info )
Bonjour !
Pour obtenir la liste des caractères spéciaux et leur équivalent html , faire simplement une recherche Google avec 'html caracteres speciaux'
Heu... Pas trop compris là. Le propos n'est pas d'avoir cette liste
Donc ça donne ça pour le moment (avec sed) :
#! /bin/bash
fichier="testsed"
zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" > $fichier
sed -i 's/à/\à/g;s/â/\â/g;s/ä/\ä/g;s/ç/\ç/g;s/è/\è/g;s/é/\é/g;s/ê/\ê/g;s/ë/\ë/g;s/î/\î/g;s/ï/\ï/g;s/ù/\ù/g;s/ü/\ü/g;s/û/\û/g' "$fichier"
cat "$fichier" | xclip
Plus qu'à mettre un rm quelque chose pour friter "$fichier" et c'ets bon
Dernière modification par soupaloignon (Le 13/02/2010, à 00:39)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#10 Le 13/02/2010, à 01:02
- soupaloignon
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Voilà le script terminé (pour moi en tout cas). J'y ai mis une dernière modification : La phrase avec les caractères html est sauvegardée dans un fichier log, à la suite des phrases déjà converties.
#! /bin/bash
fichier="CA"
fichier_log="CA-log"
zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" > $fichier
sed -i 's/à/\à/g;s/â/\â/g;s/ä/\ä/g;s/ç/\ç/g;s/è/\è/g;s/é/\é/g;s/ê/\ê/g;s/ë/\ë/g;s/î/\î/g;s/ï/\ï/g;s/ù/\ù/g;s/ü/\ü/g;s/û/\û/g' "$fichier"
zenity --info --title "Substitution" --text "la phrase est disponible dans le presse papier. Un clic molette pour la coller"
cat "$fichier" | xclip
cat "$fichier" >> $fichier_log
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#11 Le 13/02/2010, à 01:08
- Tomzz
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Si tu veux du fun en suivant le conseil de jhal tu tombe sur la page http://alexandre.alapetite.fr/doc-alex/alx_special.html et la tu trouvera une tripoté de caractères en plus par exemple comment faire ℵ ou ≅
Dernière modification par Tomzz (Le 13/02/2010, à 01:09)
Hors ligne
#12 Le 13/02/2010, à 01:26
- AnsuzPeorth
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Pourquoi passer par un fichier temporaire, en plus du fait un sed -i dessus après ? Utilise les pipes.
J'aurais fait comme ça (j'utilse une fonction, c'est plus claire je trouve)
#! /bin/bash
fichier_log="CA-log"
function ToHtml ()
{
sed 's/à/\à/g
s/â/\â/g
s/ä/\ä/g
s/ç/\ç/g
s/è/\è/g
s/é/\é/g
s/ê/\ê/g
s/ë/\ë/g
s/î/\î/g
s/ï/\ï/g
s/ù/\ù/g
s/ü/\ü/g
s/û/\û/g'
}
zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" | ToHtml > $fichier_log
zenity --info --title "Substitution" --text "la phrase est disponible dans le presse papier. Un clic molette pour la coller"
xclip < $fichier_log
[Edit]: code modifié pour avoir les 2 fenêtres
Dernière modification par AnsuzPeorth (Le 13/02/2010, à 01:35)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#13 Le 13/02/2010, à 09:40
- soupaloignon
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Pourquoi passer par un fichier temporaire, en plus du fait un sed -i dessus après ? Utilise les pipes.
Pourquoi ? Mais pour une raison simple, je n'y connais rien en bash, ou en tout cas le minimum
Donc quand j'ai besoin de quelque chose je bricole. Je vais à la pêche aux infos sur le net, je récupère des bouts de code, j'assemble, je teste, je remet des bouts... Bref du bricolage.
Mais tu vois, quelle satisfaction lorsque ça fonctionne . C'est la plupart du temps à chier niveau "pureté" du code, mais je suis arrivé à le faire. Et ça cela n'a pas de prix.
Alors ensuite, soit quand ça marche, ou soit parce que je bute sur des choses pour lesquelles je ne trouve pas de solutions, je poste une demande d'aide/optimisation ici.
Et là c'est que du bon lorsque je vois arriver des infos venant de personnes qui taquinent vraiment bien le code, c'est très formateur.
Le script que tu proposes est génial (enfin de mon point de vue de néophyte en tout cas). Déjà ça marche .
Mais surtout c'est propre, logique... Presque beau en fait . Et c'est aussi parce que j'ai galèré à écrire le script avant que je peux en comprendre la logique et la structure. Donc que du bon
Je connaissais pas trop le coup de la fonction, c'est excellent.
Merci encore pour ton aide
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#14 Le 14/02/2010, à 18:11
- Ph3nix_
Re : [résolu] script bash pour remplacer caracteres accentués par du html
En 2 lignes:
#!/bin/bash
sudo apt-get install recode
recode utf8..h <fichier a convertir>
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#15 Le 14/02/2010, à 23:36
- AnsuzPeorth
Re : [résolu] script bash pour remplacer caracteres accentués par du html
En 2 lignes: neutral
Merci qd même pour l'info mais,
AnsuzPeorth a écrit :Sinon il existe un paquet html2text, et text2html qui fait ce travail !
Oui, j'avais vu, mais cela me plaisait d'essayer de coder ça en bash
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#16 Le 15/02/2010, à 01:17
- sputnick
Re : [résolu] script bash pour remplacer caracteres accentués par du html
En 2 lignes:
recode utf8..h <fichier a convertir>
Merci, connaissait pas h, c'est chanmé ^^
J'utilise perl et le module HTML::Entities pour ça d'habitude
Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr
Hors ligne
#17 Le 22/11/2019, à 09:55
- krakoukas
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Une solution pour remplacer les caractères non souhaités par d'autres:
#!/bin/bash
INPUT="$1"
declare -a acc
declare -a noa
acc=('$' 'è' 'ê' 'é' 'À' 'Á' 'Â' 'Ã' 'Ä' 'Å' 'Æ' 'Ç' 'È' 'É' 'Ê' 'Ë' 'Ì' 'Í' 'Î' 'Ï' 'Ð' 'Ñ' 'Ò' 'Ó' 'Ô' 'Õ' 'Ö' 'Ø' 'Ù' 'Ú' 'Û' 'Ü' 'Ý' 'ß' 'à' 'á' 'â' 'ã' 'ä' 'å' 'æ' 'ç' 'è' 'é' 'ê' 'ë' 'ì' 'í' 'î' 'ï' 'ñ' 'ò' 'ó' 'ô' 'õ' 'ö' 'ø' 'ù' 'ú' 'û' 'ü' 'ý' 'ÿ' 'Ā' 'ā' 'Ă' 'ă' 'Ą' 'ą' 'Ć' 'ć' 'Ĉ' 'ĉ' 'Ċ' 'ċ' 'Č' 'č' 'Ď' 'ď' 'Đ' 'đ' 'Ē' 'ē' 'Ĕ' 'ĕ' 'Ė' 'ė' 'Ę' 'ę' 'Ě' 'ě' 'Ĝ' 'ĝ' 'Ğ' 'ğ' 'Ġ' 'ġ' 'Ģ' 'ģ' 'Ĥ' 'ĥ' 'Ħ' 'ħ' 'Ĩ' 'ĩ' 'Ī' 'ī' 'Ĭ' 'ĭ' 'Į' 'į' 'İ' 'ı' 'IJ' 'ij' 'Ĵ' 'ĵ' 'Ķ' 'ķ' 'Ĺ' 'ĺ' 'Ļ' 'ļ' 'Ľ' 'ľ' 'Ŀ' 'ŀ' 'Ł' 'ł' 'Ń' 'ń' 'Ņ' 'ņ' 'Ň' 'ň' 'ʼn' 'Ō' 'ō' 'Ŏ' 'ŏ' 'Ő' 'ő' 'Œ' 'œ' 'Ŕ' 'ŕ' 'Ŗ' 'ŗ' 'Ř' 'ř' 'Ś' 'ś' 'Ŝ' 'ŝ' 'Ş' 'ş' 'Š' 'š' 'Ţ' 'ţ' 'Ť' 'ť' 'Ŧ' 'ŧ' 'Ũ' 'ũ' 'Ū' 'ū' 'Ŭ' 'ŭ' 'Ů' 'ů' 'Ű' 'ű' 'Ų' 'ų' 'Ŵ' 'ŵ' 'Ŷ' 'ŷ' 'Ÿ' 'Ź' 'ź' 'Ż' 'ż' 'Ž' 'ž' 'ſ' 'ƒ' 'Ơ' 'ơ' 'Ư' 'ư' 'Ǎ' 'ǎ' 'Ǐ' 'ǐ' 'Ǒ' 'ǒ' 'Ǔ' 'ǔ' 'Ǖ' 'ǖ' 'Ǘ' 'ǘ' 'Ǚ' 'ǚ' 'Ǜ' 'ǜ' 'Ǻ' 'ǻ' 'Ǽ' 'ǽ' 'Ǿ' 'ǿ');
noa=('S' 'e' 'e' 'e' 'A' 'A' 'A' 'A' 'A' 'A' 'AE' 'C' 'E' 'E' 'E' 'E' 'I' 'I' 'I' 'I' 'D' 'N' 'O' 'O' 'O' 'O' 'O' 'O' 'U' 'U' 'U' 'U' 'Y' 's' 'a' 'a' 'a' 'a' 'a' 'a' 'ae' 'c' 'e' 'e' 'e' 'e' 'i' 'i' 'i' 'i' 'n' 'o' 'o' 'o' 'o' 'o' 'o' 'u' 'u' 'u' 'u' 'y' 'y' 'A' 'a' 'A' 'a' 'A' 'a' 'C' 'c' 'C' 'c' 'C' 'c' 'C' 'c' 'D' 'd' 'D' 'd' 'E' 'e' 'E' 'e' 'E' 'e' 'E' 'e' 'E' 'e' 'G' 'g' 'G' 'g' 'G' 'g' 'G' 'g' 'H' 'h' 'H' 'h' 'I' 'i' 'I' 'i' 'I' 'i' 'I' 'i' 'I' 'i' 'IJ' 'ij' 'J' 'j' 'K' 'k' 'L' 'l' 'L' 'l' 'L' 'l' 'L' 'l' 'l' 'l' 'N' 'n' 'N' 'n' 'N' 'n' 'n' 'O' 'o' 'O' 'o' 'O' 'o' 'OE' 'oe' 'R' 'r' 'R' 'r' 'R' 'r' 'S' 's' 'S' 's' 'S' 's' 'S' 's' 'T' 't' 'T' 't' 'T' 't' 'U' 'u' 'U' 'u' 'U' 'u' 'U' 'u' 'U' 'u' 'U' 'u' 'W' 'w' 'Y' 'y' 'Y' 'Z' 'z' 'Z' 'z' 'Z' 'z' 's' 'f' 'O' 'o' 'U' 'u' 'A' 'a' 'I' 'i' 'O' 'o' 'U' 'u' 'U' 'u' 'U' 'u' 'U' 'u' 'U' 'u' 'A' 'a' 'AE' 'ae' 'O' 'o');
i=0
length=${#INPUT}
while [[ $i -lt $length ]]; do
char=${INPUT:$i:1};
#echo $i:$char
j=0
for letter in "${acc[@]}"
do
if [[ "$letter" == "$char" ]]; then
char="${noa[$j]}"
fi
((j++))
done
((i++))
OUTPUT=$OUTPUT$char
done
echo $OUTPUT
Hors ligne
#18 Le 22/11/2019, à 10:46
- bruno
Re : [résolu] script bash pour remplacer caracteres accentués par du html
Joli déterrage après presque 10 ans pour un script qui réinvente la roue, en moins bien. Cf. #14