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 09/02/2012, 14h38   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Par défaut Remplacer le code couleur Unix par l'équivalent HTML

Bonjour,

J'affiche à l'écran une code que je redirige vers un fichier.
Je souhaite ensuite transmettre ce fichier au format HTML.
Pour celà il faut donc que je substitue le code couleur UNIX et les sauts de lignes à son équivalent html

Seulement j'ai essayé avec tr ou sed, rien n'y fait je n'arrive pas.

par exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
#!/bin/sh
 
ROUGE="\033[31m"
ROUGE_HTML="<font color='red'>"
BR="\n"
BR_HTML="<br>"
 
echo -e "Toto va etre ecrit en rouge \n\n $ROUGE toto  \n\n" | tee -a test.txt
 
sed -i -e "s/$ROUGE/$ROUGE_HTML/g" test.txt
sed -i -e "s/$BR/$BR_HTML/g" test.txt
Je récolte toutes les erreurs telles que:
"unterminated `s' command"
mais jamais le résultat...

Si une bonne âme peut m'aider...
Merci par avance
tisnoopy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 15h32   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Il suffit de refaire un "echo" de ta ligne en changeant les variables "$ROUGE" et "$BR" par "$ROUGE_HTML" et "$BR_HTML".

Juste pour info, ton fichier "test.txt" ne contient que du texte, sans couleur et sans variable, de ce fait tes commandes "sed" ne servent à rien
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2012, 16h30   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 073
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 073
Points : 4 165
Points : 4 165
Bonjour,

bien sûr que le fichier ne contient pas que du texte :
Code :
1
2
3
 echo -e '\033[31m toto \033[m' > test.txt
cat -v test.txt
^[[31m toto ^[[m
où l'on voit deux problèmes :
- le fichier ne contient pas \033, mais le code d'échappement ANSI ^[
- cette commande sed doit opérer avec le [, de la variable ROUGE, protégé.

c'est plus facile en bash, et avec le code d'échappement ANSI :
Code :
1
2
3
4
$ rouge="^[[31m" cl="^[[m"
$ echo "${rouge}bla bla$cl" > test.txt 
$ sed -r "s/${rouge//[/\[}/rouge> /" test.txt | cat -v
rouge> bla bla^[[m

en sh, ce serait plutôt (toujours avec le code d'échappement ANSI) :
Code :
1
2
3
rouge="^[[31m" cl="^[[m"
echo "$rouge bla bla $cl" > test.txt
sed -r "s/$(echo "$rouge" | sed -r 's/\[/\\\[/')/rouge/g" test.txt
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 09/02/2012, 16h46   #4
Invité de passage
 
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
Tu peux m'expliquer ce que tu veux dire par
Citation:
- cette commande sed est qu'elle doit opérer avec le <b>[</b>, de la variable ROUGE, protégé.
Et aussi cette partie ${rouge//[/\[}, ou le nom que cette méthode porte s'il en a une je chercherais car je ne connais pas.
pour moi les {} ne servent qu'à bien délimiter le nom de ta variable donc je suis surpris de voir des caractères entre la fin du nom de la variable et le }
tisnoopy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 16h58   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 073
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 073
Points : 4 165
Points : 4 165
oups <b>[</b> est une faute de frappe, je voulais mettre le caractère [ en gras. c'est corrigé.
ce caractère est interprété par sed, il faut donc le protégé par un anti-slash.

${parametre//motif/chaine} tu trouveras ça dans le man bash
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/02/2012, 21h42   #6
Invité de passage
 
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 1
Points : 1
La portion de code pour sh me renvoie la même erreur que tout ce que j'ai pu essayé jusqu'ici
Code :
sed: -e expression #1, char 17: unterminated `s' command
sed me désespère...
tisnoopy 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 02h09.


 
 
 
 
Partenaires

Hébergement Web