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

Linux Discussion :

Extraire une heure d'une ligne de texte


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 26
    Points
    26
    Par défaut Extraire une heure d'une ligne de texte
    Bonjour,

    J'ai besoin d'extraire une heure dans une ligne d'un fichier. (en korn shell) Je sais que l'heure est au format hh:mm:ss et la ligne dans laquelle elle est mais pas sa position dans la ligne (il n'y a pas de pattern fixe autour pour une extraction simple).

    Considérons pour l'exemple que le fichier ne fait qu'une ligne (puisque isoler une ligne n'est pas un soucis).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Voici là dernière ligne qui contient 12:34:54 et que je veux extraire
    J'ai besoin d'extraire donc "12:34:54" dans une chaine.

    Je pensais utiliser un SED et une expression régulière pour remplacer tout ce qui ne correspond pas à mon schéma par rien. L'expression régulière pour l'heure n'est pas compliquée (je pensais à ..:..:..)
    Par exemple pour supprimer l'heure je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat nomFichier.txt | sed 's/..:..:..//g'
    mais comment prendre le contraire de l'expression afin de supprimer non pas l'heure mais tout le reste ? Je n'ai pas trop l'habitude des expressions régulières.

    Merci pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*\(\([0-9][0-9]\):\([0-9][0-9]\):\([0-9][0-9]\)\).*/\1/g' heure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -e 's/.*(([0-9][0-9]):([0-9][0-9]):([0-9][0-9])).*/\1/g' 
    sans les caractères de protection pour la lisibilité
    .* tout ce qu il y a avant l'heure
    puis le prototype de ton heure mis entre parenthèses, a savoir un nombre, :, un nombre, : et un nombre
    .* tout ce qu il y a après l'heure

    et tu ne garde que \1, soit le premier truc entre parenthèses


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    => sed -e 's/.*\(\([0-9][0-9]\):\([0-9][0-9]\):\([0-9][0-9]\)\).*/\1/g' heure
    12:34:54

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 462
    Points
    19 462
    Par défaut
    On peut alléger, en utilisant l'option -r pour ne pas avoir à taper les caractères de protection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r 's/.*([0-9]{2}:[0-9]{2}:[0-9]{2}).*/\1/' fichier
    Les accolades font correspondre exactement le nombre indiqué de séquences du caractère, ou de l'expression précédente. Dans le cas présent : deux chiffres.
    Et vu qu'il n'y a, apparemment, qu'une seule date par ligne, on peut se dispenser de la directive g

    Si tu veux n'afficher que la dernière ligne, alors que d'autres peuvent aussi contenir des dates, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -nr 's/.*([0-9]{2}:[0-9]{2}:[0-9]{2}).*/\1/; $p' fichier

Discussions similaires

  1. Extraire l'heure d'une cellule avec une date
    Par racoon971 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/06/2011, 15h18
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Extraire l'heure d'une date dans une requête
    Par zooffy dans le forum Développement
    Réponses: 13
    Dernier message: 29/01/2010, 09h38
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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