Forum Programmation.shell problème avec sed

Posté par  .
Étiquettes : aucune
0
7
jan.
2005
bonjour,
je fais un script de parsing d'une page web dans laquelle je veux (entre autres) récupérer un formulaire.

en gros la page web est du type :


<plein de choses ...>

<input ... >
... ( le nombre de ligne ici est variable )

<plein d'autres choses>


la page web est télécharger et enregistré dans page.html (par exemple)

J'ai essayé ça :

cat page.html | sed -e /my_form/,/"<\/form>"/p


mais cela ne marche pas. ( ca m'affiche tout le fichier page.html )

Est ce que quelqu'un voit ou est l'erreur dans ma ligne sed ? ou alors pourquoi cela ne marche pas .

merci.
  • # form a disparu

    Posté par  . Évalué à 1.

    Le code de la page web est :

    <plein de choses ...>

    <form name='my_form'>
    <input ... >
    ... ( le nombre de ligne ici est variable )
    </form>

    <plein d'autres choses>

  • # essaie plutot ca

    Posté par  . Évalué à 1.

    sed -n '/<my_form>/,/<\/form>/ {p;}'

    • [^] # Re: essaie plutot ca

      Posté par  (site web personnel) . Évalué à 2.

      Presque parfait, mais autant donner le truc en entier :

      sed -n '/my_form/<\/form>/ {p;}' page.html
      • [^] # Re: essaie plutot ca

        Posté par  . Évalué à 3.

        Presque parfait, mais autant donner le truc qui marche :

        sed -n '/my_form/,/<\/form>/ {p;}' page.html

        À noter que « sed -n '/my_form/,/<\/form>/p' page.html » marche aussi.
        • [^] # Re: essaie plutot ca

          Posté par  . Évalué à 1.

          merci a tous !
          J'ai pu remplacer mon bout de script tout laid que j'avais fait en attendant avec grep -n, tail et head :)
  • # presque

    Posté par  . Évalué à 2.

    dans ta ligne là, tu as dis à sed d'afficher tout ce qui se trouve entre les lignes contenant my_form et </form>.
    Le problème, c'est que tu ne lui a pas dit quoi faire sur les autres lignes, donc par défaut, il n'y touche pas, et les réimprime.

    S tu rajoute un "; d" à la fin de ta commande sed (et des ' autour de ta commande), ça marche:

    cat page.html | sed -e '/my_form/,/<\/form>/ p;d'

    merci à http://library.n0i.net/linux-unix/faq/sed/sedfaq4.html(...) :)
    • [^] # Re: presque

      Posté par  . Évalué à 2.

      merci pour la question en tout cas, ça m'a permis de me pencher plus sur sed, que je maitrise pas trop.
      sinon, je vote pour la solution de Bernard. Elle marche, et le -n de sed est fait pour ça :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.