Sed et chaines de caracteres

Résolu/Fermé
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 24 mars 2009 à 01:24
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 24 mars 2009 à 07:39
Bonjour,
je trouve des tas d'exemples pour sed sur les forums mais aucun n'explique completement l'utilisation.
je voudrais traiter par exemple :
$ligne = "mot1 *mot2 mot3* //mot4
et le transformer en :
$out = "<p>mot1<strong>mot2 mot3</strong><--!mot4--></p>

quelqu'un pourraitil m'aiguiller sur la bonne voie ?

merci d'avance

7 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 mars 2009 à 01:38
Salut,
J'imagine que le guillemet doit prendre toute la ligne ?
Ce code devrait réaliser ce que tu veux :
ligne = '"mot1 *mot2 mot3* //mot4'
out=$(echo $ligne | sed -r 's#//(.*)#<!--\1-->#g; s#"(.*)#<p>\1</p>#g; s#\*(.*)\*#<strong>\1</strong>#g')
echo $out

Cdlt
0
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
24 mars 2009 à 01:59
merci pour la reponse.
je commence a comprendre

en realite je veux lire un fichier ligne par ligne pour le convertir en html et le mettre a jour dans le fichier de sortie :

while read ligne
do
#echo -------------------
out=$(echo $ligne | sed -r 's#//(.*)#<!--\1-->#g; s#"(.*)#<p>\1</p>#g; s#\*(.*)\*#<strong>\1</strong>#g') > t.xhtml
#echo sortie
#echo $out
#echo -------------------
done < $2

seulement il me sort un fichier vide, comment faire ?

encore merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 mars 2009 à 02:05
Normal,
Si tu rediriges cette sortie :
out=$(echo $ligne | sed -r 's#//(.*)#<!--\1-->#g; s#"(.*)#<p>\1</p>#g; s#\*(.*)\*#<strong>\1</strong>#g')
dans un fichier, rien ne s'affichera à l'écran puisque le résultat de cette commande affectera out. Donc aucun affichage à l'écran.

Utilise plutôt :

out=$(echo $ligne | sed -r 's#//(.*)#<!--\1-->#g; s#"(.*)#<p>\1</p>#g; s#\*(.*)\*#<strong>\1</strong>#g')
echo $out > t.xhtml #ceci stocke dans le fichier t.xhtml
echo $out #ceci affiche à l'écran.
0
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
24 mars 2009 à 02:20
en cherchant sur des forums j'ai trouve :

sed 's@^\(.*\)\*\(.*\)\*.*//\(.*$\)@<p>\1<strong>\2<\\strong><--!\3--><//p>@g' $2 >> t.xhtml

c'est pas mal mais n'opere pas les modifs.

au final c'est mieux de traiter tou d'un coup avec sed ou ligne par ligne avec while ?

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
24 mars 2009 à 02:31
while read ligne
do
out=$(echo $ligne | sed -r 's#//(.*)#<!--\1-->#g; s#"(.*)#<p>\1</p>#g; s#\*(.*)\*#<strong>\1</strong>#g')
echo $out > t.xhtml #ceci stocke dans le fichier t.xhtml
done < $2

ceci me redonne un fichier vide
0
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
24 mars 2009 à 02:35
echo $out >> t.xhtml #ceci stocke dans le fichier t.xhtml
ceci marche c'est super

pourriez vous me detailler la commande que je puisse tout seul rajouter d'autres balises du genre
transformer {img} en <img> ou ~texte~ en <i>texte</i> ?

de plus le <p> ne marche pas tout a fait bien je voudrais que chaque ligne soit completement encadre par <p> et </p>

encore merci pour votre aide
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 mars 2009 à 07:39
Salut,

je trouve des tas d'exemples pour sed sur les forums mais aucun n'explique completement l'utilisation.
Sed - Introduction à SED - Part I
Sed - Introduction à SED - Part II
Sed - Introduction à SED - Part III
Sans oublier FAQ SED
0