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 :

Récupérer des données entre deux pattern


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Récupérer des données entre deux pattern
    Bonjour

    Je dispose d'un fichier avec le contenu suivant:
    LOLO: 10:12:CD:AQ:10
    LULU: 20:SD:10:LS:89
    Je souhaite récupérer les données de 'LOLO' sans afficher 'LOLO:'

    Je test la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat monfic | grep -o 'LOLO:.*' | gsed 's/LOLO: //'
    J'obtiens bien:
    10:12:CD:AQ:10
    Il y a t-il un moyen de réduire la commande en question ?

    Merci d'avance pour vos réponses

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    au choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed -rn '/^LOLO/{s/^LOLO: (.+)/\1/;p}' monfic
    awk '/^LOLO: .+/ {print $2}' monfic
    grep -Po "^LOLO: \K.+" monfic
    • avec sed, on essaye de match /PATTERN/{...}, et si on match on substitue s/TRUC/MACHIN/ puis on affiche p
    • avec awk c'est assez simple à comprendre, si on match /PATTERN/{...} alors on affiche le 2e champ print $2
    • avec grep on utilise des regex un peu sexy pour matcher -P, on affiche que ce qui match -o, et même si on a besoin de match sur une expression complexe, on n'affiche que ce qui se trouve après le \K (sorte de panneau stop)
    • accessoirement on évite les tournures du genre cat | grep

  3. #3
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Merci pour toutes ces explications

  4. #4
    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
    Bonjour,
    Avec sed en plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/^LOLO: /!d;s///' monfic
    Cordialement.

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par ctac_ Voir le message
    Avec sed en plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/^LOLO: /!d;s///' monfic
    bien vu
    celle-là fonctionnait aussi sed -n 's/^LOLO: //p' monfic (je suis décidément pas fan de la logique de sed )

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Olivier Regnier Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat monfic | grep -o 'LOLO:.*' | gsed 's/LOLO: //'
    Pour moi (qui suis un peu faible en "sed" ), c'est la proposition la plus simple à lire et écrire, donc la plus facile à maintenir...

    À la limite, on peut supprimer l'uuoc ainsi que le "-o" et le ".*":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '^LOLO:' monfic | gsed 's/LOLO: //'
    Quant à l'efficacité, si le fichier fait moins d'1To (à la louche), ça devrait aller!

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

Discussions similaires

  1. copier des données entre deux table access (vb2005)
    Par solid_sneak06 dans le forum VB.NET
    Réponses: 9
    Dernier message: 12/07/2008, 13h20
  2. Comment transférer des données entre deux JFrame
    Par speos dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 23/04/2007, 15h50
  3. Transferer a la volée des données entre deux tables
    Par schwinny dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 08h50
  4. Changement Des données entre deux bases
    Par Chakib dans le forum Access
    Réponses: 4
    Dernier message: 28/01/2006, 10h59
  5. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01

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