[SHELL] probleme recherche sed

probleme recherche sed [SHELL] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 02-05-2009 à 19:35:55    

bonjour,
 
ca fait une demi journée que je me casse là tete avec ça:
 
j'ai un fichier imdb.txt qui contient entre autre ça:
 

Code :
  1. 31 March 1999 (USA)
  2. <a class="tn15more inline" href="/title/tt0147800/releaseinfo" onClick="(new Image()).src='/rg/title-tease/releasedates/images/b.gif?link=/title/tt0147800/releaseinfo';">more</a>
  3. </div>
  4. <div class="info">
  5. <h5>Genre:</h5>
  6. <a href="/Sections/Genres/Comedy/">Comedy</a> | <a href="/Sections/Genres/Romance/">Romance</a> <a class="tn15more inline" href="/title/tt0147800/keywords" onClick="(new Image()).src='/rg/title-tease/keywords/images/b.gif?link=/title/tt0147800/keywords';">more</a>
  7. </div>
  8. <div class="info">
  9. <h5>Tagline:</h5>
  10. How do I loathe thee? Let me count the ways. <a class="tn15more inline" href="/title/tt0147800/taglines" onClick="(new Image()).src='/rg/title-tease/taglines/images/b.gif?link=/title/tt0147800/taglines';">more</a>
  11. </div>
  12. <div class="info">


 
je souhaite récuperer les genres, j'utilise cette commande:
 

Code :
  1. sed -n 's/.*\/Sections\/Genres\/.*\/\(.*\)\/">.*/\1/p' imdb.txt


 
et a chaque fois il ne me retourne que Romance
 
je ne vois pas ou j'ai loupé et je lutte avec les expr regulières !
 
merci à toute aide !

Reply

Marsh Posté le 02-05-2009 à 19:35:55   

Reply

Marsh Posté le 02-05-2009 à 20:04:56    

C'est pas vraiment le bon outil sed, ton xml peut avoir des retours à la ligne partout et sed lui bosse ligne par ligne...
 
Sinon ton problème est simple : .* choppe toujours le maximum de truc, donc dans

Citation :

<a href="/Sections/Genres/Comedy/">Comedy</a> | <a href="/Sections/Genres/Romance/">Romance</a> <a class="tn15more inline" href="/title/tt0147800/keywords" onClick="(new Image()).src='/rg/title-tease/keywords/images/b.gif?link=/title/tt0147800/keywords';">more</a>


le plus grand truc que ton .*\/Sections peut attraper c'est

Citation :

<a href="/Sections/Genres/Comedy/">Comedy</a> | <a href="/Sections


 
 
Sinon tu peux utiliser autre chose que '/' comme séparateur (genre s@toto@tutu), ca t'évitera de devoir protéger les / du xml


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 02-05-2009 à 20:30:15    

ok effctivement c plus clair en changeant de séparateur c'est déjà plus clair

Code :
  1. sed -n 's#.*<a href="/Sections/Genres/\(.*\)/">.*#\1#p' imdb.txt


 
par contre je ne vois pas quoi utiliser d'autre que sed pour cela, toute suggestion est bienvenue :D
 
est-il possible tout de meme de sortir les 2 résultats avec sed?

Reply

Marsh Posté le 02-05-2009 à 21:22:25    

plus précisement, au point ou j'en suis, j'ai un fichier temp qui contient:

 
Code :
  1. Comedy/">Comedy</a> | <a href="/Sections/Genres/Drama/">Drama</a> | <a href="/Sections/Genres/Romance/">Romance</a>
 

je cherche a extraire Comedy / Drama / Romance
chacun est en cadré par /"> et </a>, il doit bien exister un moyen :)


Message édité par ppic le 02-05-2009 à 21:35:57
Reply

Marsh Posté le 03-05-2009 à 01:33:54    

j'ai avancé!
j'en suis au remplacement dans le fichier
 
sed 's/<genre>.*<\/genre>/$genre/' $chemin > test.nfo
 
le pb, c'est que dans le fichier, il m'ecris $genre au lieu du contenu
 
et si je fais:
 
sed 's/<genre>.*<\/genre>/'"$genre"'/' $chemin > test.nfo
 
j'ai le droit à:
sed: bad format in substitution expression

Reply

Marsh Posté le 03-05-2009 à 08:46:45    

Tu peux tout englober avec des " plutôt qu'avec des ', et ton $genre sera substitué par sa valeur


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 03-05-2009 à 11:45:19    

j'ai essayé:
sed "s/<genre>.*<\/genre>/${genre}/" $chemin
 
résultat:
sed: -e expression #1, char 27: unknown option to `s'

Reply

Marsh Posté le 03-05-2009 à 11:51:54    

ppic a écrit :

j'ai essayé:
sed "s/<genre>.*<\/genre>/${genre}/" $chemin
 
résultat:
sed: -e expression #1, char 27: unknown option to `s'


 
ton $genre contient quoi ?


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 03-05-2009 à 12:03:35    

ça:
/ / War / History / Action
 
ça viendrait des / ?

Reply

Marsh Posté le 03-05-2009 à 12:06:41    

trouvé!
 
sed "s@<genre>.*</genre>@$genre@" $chemin
 
ta question m'a mis la puce a l'oreille !
 
merci

Reply

Marsh Posté le 03-05-2009 à 12:06:41   

Reply

Marsh Posté le 03-05-2009 à 12:57:37    

ppic a écrit :

trouvé!
 
sed "s@<genre>.*</genre>@$genre@" $chemin
 
ta question m'a mis la puce a l'oreille !
 
merci


 
 
et oui ;) si ton truc final ressemble à s/dfe/ere/wfew/rer/wer/er/er/e  c'est non valide pour sed


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 03-05-2009 à 13:08:56    

vi il interprete les /
 
j'en ai perdu des cheveux la dessus !
dur de se remettre au script des fois :D
 
merci a toi !

Reply

Marsh Posté le 03-05-2009 à 22:23:35    

J'ai rajouté les headers ( le minimum vital ), car pour moi ce n'est pas du XML mais du HTML.
 

Code :
  1. <html>
  2. <head></head>
  3. <body>
  4. <a class="tn15more inline" href="/title/tt0147800/releaseinfo" onClick="(new Image()).src='/rg/title-tease/releasedates/images/b.gif?link=/title/tt0147800/releaseinfo';">more</a>
  5. </div>
  6. <div class="info">
  7. <h5>Genre:</h5>
  8. <a href="/Sections/Genres/Comedy/">Comedy</a> | <a href="/Sections/Genres/Romance/">Romance</a> <a class="tn15more inline" href="/title/tt0147800/keywords" onClick="(new Image()).src='/rg/title-tease/keywords/images/b.gif?link=/title/tt0147800/keywords';">more</a>
  9. </div>
  10. <div class="info">
  11. <h5>Tagline:</h5>
  12. How do I loathe thee? Let me count the ways. <a class="tn15more inline" href="/title/tt0147800/taglines" onClick="(new Image()).src='/rg/title-tease/taglines/images/b.gif?link=/title/tt0147800/taglines';">more</a>
  13. </div>
  14. <div class="info">
  15. </body>
  16. </html>


 
Voici le code :

Code :
  1. mech-dump --links /tmp/l.html | awk -F'/' '/Genres/ {print $4}'


 
Mais le mieux serais d'apprendre un language de dernière génération comme perl, ruby, python, car pour ce qui est de parser du HTML avec sed, c'est rarement une bonne idée. Ils ont tous des classes/modules qui permettent de faire ça proprement, CF -> http://htmlparsing.icenine.ca/doku.php

Reply

Marsh Posté le 03-05-2009 à 23:10:25    

je comprend bien le point de vue, mais c'est une opération a faire une seule fois sur 400 fichier.
j'ai pour le moment trouvé la solution, je ne peux par contre pas testé la tienne, mech-dump n'est pas dispo chez moi (je suis sur un nas synology)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed