Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile. 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/à/\&agrave;/'

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 smile

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/à/\&agrave;/' $fichier | \
sed 's/â/\&acirc;/' | \
sed 's/ä/\&auml;/' | \
sed 's/ç/\&ccedil;/' | \
sed 's/è/\&egrave;/' | \
sed 's/é/\&eacute;/' | \
sed 's/ê/\&ecirc;/' | \
sed 's/ë/\&euml;/' | \
sed 's/î/\&icirc;/' | \
sed 's/ï/\&iuml;/' | \
sed 's/ù/\&ugrave;/' | \
sed 's/ü/\&uuml;/' | \
sed 's/û/\&ucirc;/' > 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/à/\&agrave;/g
s/â/\&acirc;/g
s/ä/\&auml;/g
s/ç/\&ccedil;/g
s/è/\&egrave;/g
s/é/\&eacute;/g
s/ê/\&ecirc;/g
s/ë/\&euml;/g
s/î/\&icirc;/g
s/ï/\&iuml;/g
s/ù/\&ugrave;/g
s/ü/\&uuml;/g
s/û/\&ucirc;/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

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 wink

AnsuzPeorth a écrit :

ps:il manque l'espace dans la conversion, et le drapeau g de sed pour modifier toutes les occurences.

Oups, bien vu



Auteur inconnu, son post a disparu a écrit :

#! /bin/bash

fichier="testsed"

zenity --entry --title "Substitution" --text "Entrez la phrase :" --entry-text "" > $fichier

sed -i 's/à/\&agrave;/g;s/â/\&acirc;/g;s/ä/\&auml;/g;s/ç/\&ccedil;/g;s/è/\&egrave;/g;s/é/\&eacute;/g;s/ê/\&ecirc;/g;s/ë/\&euml;/g;s/î/\&icirc;/g;s/ï/\&iuml;/g;s/ù/\&ugrave;/g;s/ü/\&uuml;/g;s/û/\&ucirc;/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 big_smile, 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&eacute;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' cool


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 big_smile

cat "$fichier" | xclip
Tomzz a écrit :

Au risque de casser le côté fun big_smile,

Justement, je vaux pas le casser, vive le bash big_smile (mais merci pour ton info wink)


jlhal a écrit :

Bonjour !
Pour obtenir la liste des caractères spéciaux et leur équivalent html , faire simplement une recherche Google avec 'html caracteres speciaux' cool

Heu... Pas trop compris là. Le propos n'est pas d'avoir cette liste wink


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/à/\&agrave;/g;s/â/\&acirc;/g;s/ä/\&auml;/g;s/ç/\&ccedil;/g;s/è/\&egrave;/g;s/é/\&eacute;/g;s/ê/\&ecirc;/g;s/ë/\&euml;/g;s/î/\&icirc;/g;s/ï/\&iuml;/g;s/ù/\&ugrave;/g;s/ü/\&uuml;/g;s/û/\&ucirc;/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/à/\&agrave;/g;s/â/\&acirc;/g;s/ä/\&auml;/g;s/ç/\&ccedil;/g;s/è/\&egrave;/g;s/é/\&eacute;/g;s/ê/\&ecirc;/g;s/ë/\&euml;/g;s/î/\&icirc;/g;s/ï/\&iuml;/g;s/ù/\&ugrave;/g;s/ü/\&uuml;/g;s/û/\&ucirc;/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 wink 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 &#8773;

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/à/\&agrave;/g
s/â/\&acirc;/g
s/ä/\&auml;/g
s/ç/\&ccedil;/g
s/è/\&egrave;/g
s/é/\&eacute;/g
s/ê/\&ecirc;/g
s/ë/\&euml;/g
s/î/\&icirc;/g
s/ï/\&iuml;/g
s/ù/\&ugrave;/g
s/ü/\&uuml;/g
s/û/\&ucirc;/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

AnsuzPeorth a écrit :

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 big_smile
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 wink. 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 wink.
Mais surtout c'est propre, logique... Presque beau en fait big_smile. 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 smile


==> 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: neutral

#!/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

Ph3nix_ a écrit :

En 2 lignes: neutral

Merci qd même pour l'info mais,

soupaloignon a écrit :
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 wink


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

Ph3nix_ a écrit :

En 2 lignes: neutral

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 tongue


On ne peut pas mettre d'array dans un string!
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 tongue

Hors ligne