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 :

Suppression du premier champ et des retours à la ligne d'une variable


Sujet :

Shell et commandes GNU

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut Suppression du premier champ et des retours à la ligne d'une variable
    Bonjour,

    Je travaille avec des scripts Shell, où il y a de nombreux appels à SQLPlus, pour interroger une base Oracle. Les retours de SQLPlus sont stockés dans une variable. On a alors des trucs du genre :
    Code Exemple 1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    > echo $res_compare2
    Connected.
    -1
    Code Exemple 2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    > echo $res_compare2
    Connected.
    OK.
    La procedure s'est bien passee.

    Pour tout remettre en ligne et enlever le message "connected.", les gens qui m'ont précédé sur le projet ont eu la (fausse) bonne idée de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    set $res_compare
    shift 1
    res_compare=`print $*`
    Je dis que c'est une fausse bonne idée, car dans le 1er exemple ci-dessus, "-1" est considéré comme une option et donc la variable est vide après le "shift". Et après, bibi cherche pourquoi le script fait de m***e !


    Je souhaite donc trouver une technique plus propre pour enlever le "connected.". Pour l'exemple 1, je fais simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    res_compare=$(print ${res_compare} | grep -v "Connected.")
    Je voudrais déjà savoir s'il y a une méthode plus élégante que cela.


    Sauf, ça ne m'élimine pas les retours à la ligne... Dans le cas de l'exemple 2, je souhaiterais obtenir "OK. La procedure s'est bien passee.". Je me dit que je pourrais utiliser une commande perl pour remplacer les \n par des espaces, mais ça me parait à nouveau peu élégant...



    Auriez-vous des suggestions pour faire ça de façon propre et efficace SVP ?

    Merci d'avance !

  2. #2
    Membre averti Avatar de FRUiT
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2011
    Messages : 83
    Points : 337
    Points
    337
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > var="$(printf "%b\n" "Connected." "-1")"
    > echo "$var"
    Connected.
    -1
    > echo "$var" | awk '!/Connected./'
    -1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > var="$(printf "%b\n" "Connected." "OK." "La procedure s'est bien passee.")"
    > echo "$var"
    Connected.
    OK.
    La procedure s'est bien passee.
    > res_compare="$(echo "$var" | awk '!/Connected./ { printf ("%s ",$0) }')"
    > echo "$res_compare"
    OK. La procedure s'est bien passee.
    Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
    "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
    clean

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Quel système ?
    Quel environnement ?
    Quel shell ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ A="Connected.
    OK.
    La procedure s'est bien passee."
    
    $ echo ${A}
    Connected. OK. La procedure s'est bien passee.
    
    $ echo "${A}"
    Connected.
    OK.
    La procedure s'est bien passee.
    
    $
    Normalement sans quote ta variable devrait être sur une seule ligne
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Bonjour,

    ...

    Auriez-vous des suggestions pour faire ça de façon propre et efficace SVP ?

    Merci d'avance !
    Modifier la façon dont $var est alimenté

    Sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ echo "$var" | tail -1
    -1
    $ Array=($(echo $var))
    $ echo ${Array[1]}
    -1

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Bonjour,


    pour éviter ce type de désagrément, utiliser :-- signifie "fin des options".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Merci pour vos différentes réponses. Elles m'apportent différents éléments intéressants.


    Je voulais juste revenir sur la remarque de zipe31. Effectivement, il y a un problème de retour à la ligne. Mais c'était bizarre :
    - dans mon script test, je n'ai pas mis de guillemet, et je n'ai pas eu de problème.
    - une fois placé le même code dans le script final (beaucoup long, dans lequel je corrigeais une anomalie donc...), il y a eu le problème... J'ai rajouté les guillemets et c'était bon.
    Ce problème ne devrait-il pas être systématique ?

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Re-

    Je vais me répéter

    Quel système ?
    Quel environnement ?
    Quel shell ?

    Merci
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    > uname -a
    SunOS sun45 5.10 Generic_142900-12 sun4u sparc SUNW,SPARC-Enterprise

    Quelle différence fais-tu entre environnement et système ?


    Pour ma version de ksh....Je n'arrive pas à la trouver

  9. #9
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Oups désolé, question environnement c'était plus en rapport avec les distribs GNU/Linux et leurs interfaces graphiques

    Sinon est-ce que ton script est aussi en ksh ?

    Après pour répondre à ta question :
    - une fois placé le même code dans le script final (beaucoup long, dans lequel je corrigeais une anomalie donc...), il y a eu le problème... J'ai rajouté les guillemets et c'était bon.
    Ce problème ne devrait-il pas être systématique ?
    Normalement si, mais là je ne vois pas
    $ man woman
    Il n'y a pas de page de manuel pour woman.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2013, 14h39
  2. Retour à la ligne dans une variable
    Par fardon57 dans le forum Jasper
    Réponses: 1
    Dernier message: 11/02/2012, 11h22
  3. Réponses: 2
    Dernier message: 17/04/2010, 23h30
  4. Supprimer des retour à la ligne dans une variable
    Par havany dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2010, 12h12
  5. Retour à la ligne dans une variable
    Par kanzarih dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2009, 13h02

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