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 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>&nbsp;&nbsp;[/doc]
je veux extraire dans la variable prix "xxxx"
j'ai essayé

prix= $chaine | sed "s/\(^                        <span class="Style3">Prix : \([^\']*\) euros </span>&nbsp;&nbsp;$\)//g"

j'ai essayé

prix= $chaine | sed "s/\(^                        <span class="Style3">Prix : \|\ euros </span>&nbsp;&nbsp;$\)//g"

j'ai essayé

prix= $chaine | sed "s/\(^                        <span class="Style3">Prix : \(.*\) euros </span>&nbsp;&nbsp;$\)//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>&nbsp;&nbsp;"

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>&nbsp;&nbsp;'
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>&nbsp;&nbsp;'
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)

hurley a écrit :

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 :-)

hurley a écrit :

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