#1 Le 02/12/2007, à 00:32
- Id2ndR
[Résolu] awt/sed : Manipuler des chaines de caractères en bash
Bonjour,
Je m'adresse ici à ceux qui connaissent bien sed et/ou awt.
Je voudrais pouvoir transformer facilement la chaine suivante :
"InstallLocation"="E:\\Mon chemin - composé\\"
En ceci :
e:/Mon chemin - composé
Résumé des manipulations à faire :
- Supprimer ce qui est avant le égal (inclus)
- Supprimer les guillemets
=> Ca je sais le faire avec la commande sed -e s/\"InstallLocation\"=//
- Changer la première majuscule en minuscule
- Changer \\ en /
=> Pour la majuscule, awt doit pouvoir le faire, mais je ne sais pas bien le manipuler
=> Le changement avec les slash est faisable avec sed, mais le résultat de l'exécution n'est pas le même si je renvoie le résultat à l'écran avec la même commande ($ echo "$TEXTE" | sed -e "s/\\\\\\\\/\\\\/g") ou si j'évalue l'expression ($ VARIABLE=`echo "$TEXTE" | sed -e "s/\\\\\\\\/\\\\/g"`). Dans le dernier cas, ça ne marche pas.
J'aimerai donc votre aide pour les deux derniers points.
Merci
Dernière modification par Id2ndR (Le 02/12/2007, à 14:17)
Hors ligne
#2 Le 02/12/2007, à 02:53
- frafa
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
lo
Bien compliqué mon truc , j\'suis pas un pro de sed doit y avoir beaucoup + simple
http://www.gnu.org/software/sed/manual/sed.html
http://sed.sourceforge.net/sed1line_fr.html
echo '"InstallLocation"="E:\\Mon chemin - composé\\"' | sed '/.*\="/!d; s///;q' | sed '/\\\\/!d; s//\//;q' | sed '/\\\\/!d; s///;q' | sed 's/\"//;q' | sed 's/^./\l&/'
Dernière modification par frafa (Le 02/12/2007, à 02:53)
Hors ligne
#3 Le 02/12/2007, à 04:19
- bertrand0
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
sed -n 's:\\\\:/:g ;s:"[^"]*"="\([^"]*[^"/]\)/\?":\L\1:p'
Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
Buffon, Discours sur le style
Hors ligne
#4 Le 02/12/2007, à 05:51
- Alain.g
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
Salut
Par rapport à la solution donnée par bertrand0, il faudrait juste remplacer le \L par un \l afin d'éviter que d'autres lettres ne soient mises en minuscule.
Xubuntu Karmic !
Hors ligne
#5 Le 02/12/2007, à 14:13
- Id2ndR
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
J'ai trouvé la solution en m'inspirant de vos réponses :
$ echo '"InstallLocation"="E:\\Mon chemin - composé\\"' | sed -n 's:\\\\:/:g ;s:"[^"]*"="\([^"]*[^"/]\)/\?":\1:p ; s:\(.\):\L\1:p'
Je n'ai pas utilisé \I au lieu de \L car ça ne marchait plus. Par contre, j'ai rajouté la dernière partire de l'expression.
Merci à tous !
Dernière modification par Id2ndR (Le 02/12/2007, à 14:47)
Hors ligne
#6 Le 02/12/2007, à 15:15
- Id2ndR
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
Pour l'utilisation à l'intérieur d'une expression évaluée (entre "`"), j'ai juste doublé les 4 slash.
Hors ligne
#7 Le 02/12/2007, à 18:07
- Alain.g
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
Je n'ai pas utilisé \I au lieu de \L car ça ne marchait plus.
Je ne parlais pas d'un i majuscule, mais d'un l (L) minuscule.
Xubuntu Karmic !
Hors ligne
#8 Le 03/12/2007, à 20:58
- Id2ndR
Re : [Résolu] awt/sed : Manipuler des chaines de caractères en bash
Ok Alain.g. Autant pour moi. Ta solution fonctionne parfaitement .
Hors ligne