#1 Le 18/06/2009, à 19:46
- hurley
[RESOLU] sous-chaine d'une chaine (Sed ... et match)
Bonsoir, je sais qu'il y a déjà plein de post et de tutos pour faire ça....mais je n'y arrive pas....
j'ai une variable nommée chaine qui contient[doc] <span class="Style3">Prix : xxxx euros </span> [/doc]
je veux extraire dans la variable prix "xxxx"
j'ai essayé
prix= $chaine | sed "s/\(^ <span class="Style3">Prix : \([^\']*\) euros </span> $\)//g"
j'ai essayé
prix= $chaine | sed "s/\(^ <span class="Style3">Prix : \|\ euros </span> $\)//g"
j'ai essayé
prix= $chaine | sed "s/\(^ <span class="Style3">Prix : \(.*\) euros </span> $\)//g"
en fait j'essaie de transposer ce que je trouve sur les forums, et ben ça marche pas.... si quelqu'un peut m'expliquer ce qui ne va pas dans ma ligne de commande (j'avoue que je ne comprends pas toujours ce que je demande à la commande....). Merci.....
Dernière modification par hurley (Le 19/06/2009, à 20:21)
HP Pavilion dv6-1160 - Ubuntu 10.04 LTS "The Lucid Lynx"
"Windows sert à avoir IE; IE sert à télécharger firefox; Firefox sert à télécharger linux"
Hors ligne
#2 Le 18/06/2009, à 20:02
- gilbert
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
si chaine=" <span class="Style3">Prix : xxxx euros </span> "
en shell posix :
prix=`echo $chaine | sed -e 's/^.*Prix : \([[:alnum:]]*\) euros.*/\1/'`
echo $chaine
en bash, plus propre :
prix=$(echo $chaine | sed -e 's/^.*Prix : \([[:alnum:]]*\) euros.*/\1/')
echo $chaine
EDIT: j'ai mis alnum pour que ça joue avec l'exemple qui est xxxx si tu veux être plus correct un prix est composés de chiffres et il faudrait remplacer alnum par digit.
Dernière modification par gilbert (Le 18/06/2009, à 20:03)
Simplement moi-même..
Hors ligne
#3 Le 18/06/2009, à 20:32
- hurley
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
je me demande s'il faut changer "echo $chaine" par "echo $prix" en deuxième ligne
prix=$(echo $chaine | sed -e 's/^.*Prix : \([[:digit:]]*\) euros.*/\1/')
echo $chaine
il me renvoie une ligne blanche
j'ai tenté en plus en rajoutant en 3ème ligne echo $prix
prix= $($chaine | sed -e 's/^.*Prix : \([[:digit:]]*\) euros.*/\1/')
echo $chaine
echo $prix
prix= $($chaine|sed -e 's/^.*Prix : \([[:digit:]]*\) euros.*/\1/')
echo $chaine
echo $prix
mais ligne blanche
Dernière modification par hurley (Le 18/06/2009, à 20:39)
HP Pavilion dv6-1160 - Ubuntu 10.04 LTS "The Lucid Lynx"
"Windows sert à avoir IE; IE sert à télécharger firefox; Firefox sert à télécharger linux"
Hors ligne
#4 Le 18/06/2009, à 21:05
- hurley
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
je comprends pas: je viens de faire un script juste avec;
chaine=' <span class="Style3">Prix : xxxx euros </span> '
prix=$(echo $chaine | sed -e 's/^.*Prix : \([[:alnum:]]*\) euros.*/\1/')
echo $prix
et ça marche
j'ai essayé
chaine=' <span class="Style3">Prix : 0000 euros </span> '
prix=$(echo $chaine | sed -e 's/^.*Prix : \([[:digit:]]*\) euros.*/\1/')
echo $prix
et ça marche aussi
donc ça vient de mon ordi
la chaine de caractère "chaine" est obtenue par
chaine= sed -n '187p' "index.php?p=sell&order=prix"
en prenant la 187 ème ligne du fichier index.php?p=sell&order=prix (qui n'a pas d'extension car code source capturé par wget)
qu'est ce que j'ai déclaré de travers?
Dernière modification par hurley (Le 18/06/2009, à 21:08)
HP Pavilion dv6-1160 - Ubuntu 10.04 LTS "The Lucid Lynx"
"Windows sert à avoir IE; IE sert à télécharger firefox; Firefox sert à télécharger linux"
Hors ligne
#5 Le 18/06/2009, à 21:32
- gilbert
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
je me demande s'il faut changer "echo $chaine" par "echo $prix" en deuxième ligne
Tout à fait, j'ai copié un peu trop vite :-)
la chaine de caractère "chaine" est obtenue par
chaine= sed -n '187p' "index.php?p=sell&order=prix"
normal que ça ne fonctionne pas.. pour stoquer dans une variable le résultat d'une commande il faut l'insérer entre $() pour le bash ou entre `` pour tout shell en général. mais il faut préférer le $()
donc :
chaine=$(sed -n '187p' "index.php?p=sell&order=prix")
Simplement moi-même..
Hors ligne
#6 Le 19/06/2009, à 16:33
- hurley
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
j'essaie ça ce soir, mais vu que j'ai compris les explications et que je suis convaincu, je pense que j'aurai simplement à te remercier et à noter RESOLU....merci
HP Pavilion dv6-1160 - Ubuntu 10.04 LTS "The Lucid Lynx"
"Windows sert à avoir IE; IE sert à télécharger firefox; Firefox sert à télécharger linux"
Hors ligne
#7 Le 19/06/2009, à 19:21
- hurley
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
dommage...........................
chaine=$(sed -n '187p' "index.php?p=sell&order=prix")
echo $chaine
prix= $(echo $chaine | sed 's/^.*Prix : \([[:digit:]]*\) euros.*/\1/')
echo $prix
il me renvoie
achat2.sh: line 11: 1650 : commande introuvable
pour info ligne 11 c'est
prix= $(echo $chaine | sed 's/^.*Prix : \([[:digit:]]*\) euros.*/\1/')
j'ai essayé de modifier, et comme on peut s'y attendre, j'ai pas encore trouvé...
Dernière modification par hurley (Le 19/06/2009, à 20:11)
HP Pavilion dv6-1160 - Ubuntu 10.04 LTS "The Lucid Lynx"
"Windows sert à avoir IE; IE sert à télécharger firefox; Firefox sert à télécharger linux"
Hors ligne
#8 Le 19/06/2009, à 20:11
- gilbert
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
oui car tu as un esapce..
Quand on affecte des variable en bash, tu ne dois pas avoir d'espace des deux côtés du signe =.
maVar=toto # correct
maVar = toto # incorrect
maVar= toto # incorrect
maVar =toto # incorrect
Simplement moi-même..
Hors ligne
#9 Le 19/06/2009, à 20:18
- hurley
Re : [RESOLU] sous-chaine d'une chaine (Sed ... et match)
J'étais persuadé d'avoir lu la nuit dernière qu'il fallait un espace après le signe "=".... Je ferais mieux de dormir un peu....
Un grand merci, ça fonctionne (le pire c'est que j'ai essayé le script en ajoutant des espaces un peu partout.... alors qu'il suffisait d'en enlever 1.....)
Bonne soirée et merci d'avoir partagé une partie de tes connaissances
Dernière modification par hurley (Le 19/06/2009, à 20:19)
HP Pavilion dv6-1160 - Ubuntu 10.04 LTS "The Lucid Lynx"
"Windows sert à avoir IE; IE sert à télécharger firefox; Firefox sert à télécharger linux"
Hors ligne