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 :

egrep : Comment renvoyer un bout de chaine via les expressions régulières ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut egrep : Comment renvoyer un bout de chaine via les expressions régulières ?
    Bonjour,

    Je voudrais récupérer seulement un bout d'une ligne renvoyée par un programme.

    Pour tester, j'utilise un fichier test.txt qui contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ABCDEF1200-: Address:  123456  Function: 0
    Ma ligne egrep :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    egrep '^ABCDEF1200-: Address: [ ]{0,1}[[:digit:]]{6,7}  Function: [[:digit:]]$' test.txt
    Je ne sais pas comment faire pour ne récupérer de cette commande que 123456.

    Merci,
    ZiP

  2. #2
    Expert confirmé

    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
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep -o '[[:digit:]]{6,7}'

  3. #3
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour zipe31,

    Ça semble fonctionner pour cet exemple mais après, je dois récupérer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ABCDEF1200-: Alpha: (.*)
    Il n'est pas possible de capturer avec les expressions régulières ?

    Peut-être existe-t-il une autre commande qui permettrait de faire ça ?

    Comment puis-je faire ?

    Merci,
    ZiP

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Bonjour,

    Donne tous les cas, car là on ne va pas s'en sortir...
    Sinon, vois avec sed qui me semble le plus aproprié

  5. #5
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour disedorgue,

    Je n'ai que ces deux cas là.

    Cordialement,
    ZiP

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Dans le 2éme cas, tu veux récupérer quoi au juste, ce qui est entre parenthèses ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    C'est une expression régulière classique donc je veux récupérer tout ce qu'il y a après 'ABCDEF1200-: Alpha: '.

    Je suis en train de travailler sur sed.

    Merci,
    ZiP

  8. #8
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    J'ai résolu mon problème avec sed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'ABCDEF1200-: Address:  123456  Function: 0' | sed -r 's/^ABCDEF1200-: Address: ([ ]{0,1}[[:digit:]]{6,7})  Function: ([[:digit:]]{1})$/\1/' | sed -r 's/^ABCDEF1200-: Alpha: (.*)$/\1/'
    Merci,
    ZiP

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Outre le fait que ta solution ne marche pas, moi, je crois surtout que tu veux le troisième champ. Donc regroupe les espaces et coupe le 3eme champ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'ABCDEF1200-: Address:  123456  Function: 0' | sed 's/ \+/ /g' |cut -d' ' -f3
    123456
    $ echo 'ABCDEF1200-: Alpha 13'  | sed 's/ \+/ /g' |cut -d' ' -f3
    13
    Et sil faut un filtre sur ABCDEF1200, alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $  echo 'ABCDEF1200-: Address:  123456  Function: 0' | sed '/^ABCDEF1200/!d;s/ \+/ /g' |cut -d' ' -f3
    123456
    $ echo 'ABCDEF1200-: Alpha 13' | sed '/^ABCDEF1200/!d;s/ \+/ /g' |cut -d' ' -f3
    13

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Si, elle fonctionne en rajoutant le '/' dans son 2ème sed pour clore la commande s.
    Petit détail, il y a un ':' après Alpha

    Une autre version sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'ABCDEF1200-: Alpha:  toto  Function: 0' | sed -r 's/.*((Address: *)|Alpha: *)(.*)/\3\2/;s/ .*Address: *$//'
    toto  Function: 0
    $ echo 'ABCDEF1200-: Address:  123456  Function: 0' | sed -r 's/.*((Address: *)|Alpha: *)(.*)/\3\2/;s/ .*Address: *$//'
    123456

  11. #11
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    J'ai corrigé.

    Merci,
    ZiP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/02/2010, 08h13
  2. Réponses: 6
    Dernier message: 14/12/2007, 23h26
  3. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  4. [JSP 2.0] Afficher un tableau via les expression language
    Par brainstorm dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 23/06/2006, 16h07
  5. Réponses: 7
    Dernier message: 27/10/2005, 19h23

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