IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[Bash] curl et sed, valeurs nulles


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut [Bash] curl et sed, valeurs nulles
    Bonjour à tous,

    voila deux jours que j'essaye de faire fonctionner mon premier script.

    j'ai parcouru le forum en long en large et en travers, je n'ai pas réussi à trouver la réponse.

    Mon script n'affiche pas les valeurs nulles dans le fichier cible version.txt, du coup impossible pour moi de savoir (en comptant) quel est le résultat associé à la ligne de ma boucle. (J'obtiens par exemple 6 résultats pour 9 entrées)

    J'ai essayé des if dans la boucle for, je n'ai plus d'idée...

    Merci d'avance !

    PS : si au passage vous avez la solution d'apres, celle qui permet de reporter en csv dans une colonne le champ et dans l'autre le résultat associé, je vous offre un rein.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    sed -e 's/\.fr\/.*/.fr/' -e 's/\.com\/.*/.com/' -e 's/\.net\/.*/.net/' -e 's/\.org\/.*/.org/' -e 's/\.be\/.*/.be/' -e 's/\.info\/.*/.info/' -e 's/\.ch\/.*/.ch/' fichier.txt >> fichier2.txt
     
    for line in $(cat fichier2.txt)
    do curl -s "$line"/language/en-GB/en-GB.xml | grep 'version' | head -n 2  | sed '1d' | cut -d '"' -f 2 >> version.txt; done

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 374
    Par défaut
    Bonjour,

    Qu'appelles-tu une valeur nulle, le fait qu'il ne trouve pas 'version' ou le fait qu'il n'y a pas de valeur entre guillemet pour la version ?

    Sinon, pas testé, mais ton sed semble simplifiable par la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\.\(fr\|com\|net\|org\|be\|info\|ch\)\/.*/.\1/'
    Je dis bien semble, car ici, il traitera le premier cas qu'il trouve et non pas dans l'ordre d'abord fr, ensuite com,...

  3. #3
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Bonjour et merci Disedorgue pour ta réponse.

    Je vais tester le sed.

    Pour répondre à ta question, je pense qu'après le grep | head | sed | cut la valeur devient nulle car, en effet, il ne trouve pas la version.

    Pour moi le fait qu'il ne trouve pas la version, ce n'est pas grave, mais qu'il n'affiche pas NULL ou autre chose en guise d'erreur me dérange.

    Puisque la valeur n'existe pas ou n'est pas trouvée, il affiche la réponse de la ligne du dessous sur la ligne nulle, décalant ainsi toutes les réponses...

    Merci d'avance !

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 374
    Par défaut
    Si une ligne vide te va:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do echo $(curl -s "$line"/language/en-GB/en-GB.xml | grep 'version' | head -n 2  | sed '1d' | cut -d '"' -f 2) >> version.txt; done

  5. #5
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Disedorgue Merci infiniment !!!!

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Salut,
    Je n'utilise pas curl mais quand je vois une ligne avec grep, head, sed et cut, je me dis qu'on peut certainement faire plus simple.
    simple n'est peut être pas le mot mais plus efficace ...
    Cordialement.

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 374
    Par défaut
    Je suis tout à fait d'accord avec toi, et j'aurai plus utilisé un parseur xml car sur du vrai xml, il n'y a aucune obligation de mettre des retours à la ligne (ou un grep plus poussé avec l'option -o )...

  8. #8
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Bonjour à tous,

    J'ai décidé il y a 3 jours de me consacrer uniquement à la création d'un script pour automatiser des heures et des heures de travaux récurrents.

    À l'heure ou je vous parle le script est entrain de faire mon travail lol.

    Pour le moment il est vrai que les lignes de mon premier script sont ne pas optimisées (mêmes si elles fonctionnent parfaitement).

    Hier, j'ai continué à le développer et j'ai pris beaucoup de plaisir.

    Je pense donc continuer à apprendre en ce sens, et suivre de près les discussions dans lesquelles Disedorgue intervient.

    Merci à vous !

    Si j’avais 6 heures pour abattre un arbre, je passerai les 4 premières à affuter ma hache. Abraham Lincoln

  9. #9
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Oui plutôt comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    lpath='/language/en-GB/en-GB.xml'
     
    while IFS= read -r url
    do
        domain=$(cut -d/ -f -3 <<<"$url") 
        echo "$url,$(xmllint --xpath 'string(//@version)' <(curl -s "$domain$lpath") 2>/dev/null)" >> joomla_versions.csv
    done < urls.txt
    Mais ça ne sera pas plus rapide, ça sera juste plus sûr.

Discussions similaires

  1. requete avec la valeur NULL
    Par Hinkel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/11/2008, 16h39
  2. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52
  3. Selectionner un champ de valeur nulle
    Par arcane dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/09/2003, 14h26
  4. [CR9] conversion de valeurs NULL
    Par ministry dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 12/09/2003, 11h41
  5. Valeurs Nulles ou Valeurs à Zéro
    Par LLaurent dans le forum XMLRAD
    Réponses: 5
    Dernier message: 30/07/2003, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo