Forum Programmation.shell Pb d'extraction d'une url

Posté par  .
Étiquettes : aucune
0
13
août
2008
Qui aurait de meilleurs yeux que moi ? La solution doit être évidente, mais, franchement, je me casse le nez.
Le problème :
Il s'agit d'extraire une url d'un fichier htm 'provht1' (le projet est d'automatiser la correction de pages fautives)
Si je fais :

old="http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18"
sed -n "/$old/=" provht1 > provold

provold donne le numero des lignes contenant l'url et ça marche très bien
Mais si je fais :

old=$(sed -n "$nlUM"p provurl1) # pour extraire l'url d'un fichier où il est ligne $nlUM
sed -n "/$old/=" provht1 > provold

provold est vide. old n'a donc pas été trouvée. Pourtant

echo "old = $old" donne :
old = http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18

l'url a donc été correctement extraite par old=$(sed -n "$nlUM"p provurl1)

Bien entendu, comme on le voit, j'ai protégé les '/'
Et toutes les autres url sont détectées correctement. Il n'y a que celle-là (sur cette page !) qui coince.
J'ai beau la regarder sous toutes les coutures, je sèche.
Quelqu'un a-t-il de meilleurs yeux ?
  • # Ca marche.

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

    Le problème n'est pas dans les elements que tu donnes
    [pterjan@plop tmp]$ cat provht1
    http://www.geographiques.com/spip/article.php3?id_article=18
    [pterjan@plop tmp]$ cat provurl1
    plop
    http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
    coin
    [pterjan@plop tmp]$ old="http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18"
    [pterjan@plop tmp]$ sed -n "/$old/=" provht1
    1
    [pterjan@plop tmp]$ nlUM=2
    [pterjan@plop tmp]$ old=$(sed -n "$nlUM"p provurl1)
    [pterjan@plop tmp]$ sed -n "/$old/=" provht1 
    1
    
    • [^] # Re: Ca marche. NON mais ou donc est-ce que ca coince ?

      Posté par  . Évalué à 1.

      Si je reproduis dans un terminal la manoeuvre exactement comme tu le dis, effectivement ça marche, mais je ne vois pas la différence de fond avec mon script
      Je me suis fait un fichier provht1 ne contenant que la ligne à chercher

      En utilisant :
      old=$(sed -n "$nlUM"p provurl1)
      sed -n "/$old/=" provht1

      Je trouve :

      old = http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
      provht1 = http://www.geographiques.com/spip/article.php3?id_article=18
      nbtrouv = 0

      Donc, chez moi, cela ne marche pas.
      Mais en allant plus loin dans le fichier provurl1, je constate :

      old = http:\/\/www.geographiques.com\/
      provht1 = http://www.geographiques.com/spip/article.php3?id_article=18
      nbtrouv = 1

      Intéressant, non ? Le pb serait dans spip/article.php3?id_article=18. Je deviens fou ! Bon maintenant je fais :
      $ old="http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18"
      $ sed -n "/$old/=" provht1
      1
      et, bien sûr :
      $ old="http:\/\/www.geographiques.com\/spip"
      $ sed -n "/$old/=" provht1
      1
      $ old="http:\/\/www.geographiques.com\/ploutch"
      $ sed -n "/$old/=" provht1
      0
      Le pb serait dans la façon dont on se procure $old ?
      Par acquis de conscience, je me tape ça dans le terminal pour éliminer un problème lié à sh monscript.sh
      $ cat provht1
      http://www.geographiques.com/spip/article.php3?id_article=18
      $ old=$(sed -n 33p provurl1) # ligne 33 celle de l'url
      $ sed -n "/$old/=" provht1
      0 # grrh !
      $ old=$(sed -n 35p provurl1) # ligne 35 = http:\/\/www.geographiques.com\/
      $ sed -n "/$old/=" provht1
      1
      M'enfin. Incroyable cette histoire. Ca doit être un truc hyper évident. Tellement que je ne le vois pas :-(
  • # Encodage ?

    Posté par  . Évalué à 2.

    A vue de nez, c'est un problème d'encodage. Ton fichier est-il ASCII de base, UTF-8, etc ?
    Pour jetter un oeil "dans" le fichier:
    # od -t a monfichier
    • [^] # Re: Encodage ? Je vais voir

      Posté par  . Évalué à 1.

      C'est une piste. D-autant que si j'utilise le fichier provurl1 :
      pop
      http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
      platsch

      J'ai :
      $ old=$(sed -n 2p provurl1)
      $ echo $old
      http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
      $ sed -n "/$old/=" provht1
      1 # ca marche

      Tandis que si j'utilise mon provurl1, j'ai :
      $ old=$(sed -n 33p provurl1)
      $ echo $old
      http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
      $ sed -n "/$old/=" provht1
      0 # ca ne marche pas

      Et sur le terminal, je ne vois pas la différence entre les deux lignes :
      http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
      http:\/\/www.geographiques.com\/spip\/article.php3?id_article=18
      On va voir avec od... demain. Là, je n'en peux plus : dodo !
      C'est curieux parce que mon fichier provurl1 a été fabriqué par un script bash qui extrait les url à partir de href="http://etc". En principe, c'est de l'ASCII de base et pour toutes les url extraites, aucun problème sauf celle-là et même une partie de celle-là 'spip... etc' Une scorie se serait donc glissée dans cette partie lors de l'opération d'extraction ? Possible, mais inquiétant car c'est une centaine de pages que je voudrais vérifier
      • [^] # Re: Resolu

        Posté par  . Évalué à 1.

        Trouvé grâce à od -ta provurl1. Merci Kerro

        Un méchant espace s'était ajouté à la fin de mon url. Evidemment totalement invisible cf les deux lignes ci-dessus produites par couper/coller
        Reste maintenant à savoir pourquoi et comment cet espace est venu polluer mon url. Mais c'est une autre histoire
        Merci aussi à Pascal qui m'a donné un moyen d'arrêter de tourner en rond

Suivre le flux des commentaires

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