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 :

[sed] Comment extraire la date d'un fichier horodaté avec les sous groupes


Sujet :

Shell et commandes GNU

  1. #1
    Membre expérimenté
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 006
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 006
    Points : 1 741
    Points
    1 741
    Par défaut [sed] Comment extraire la date d'un fichier horodaté avec les sous groupes
    Bonjour,


    J'ai une liste de fichier compressé (tar.gz) qui sont horodaté.
    Exemple :
    AOC_303_2017_03_17.tar.gz
    IICAPACITE_Capacity_2017_03_20.tar.gz

    Comme vous pouvez le voire, la date est au format : aaaa_mm_jj
    soit en expression regex : ([0-9]{4}_[0-9]{2}_[0-9]{2})

    Quand on utilise l'outil en ligne : https://regex101.com/
    avec l'expression : ([0-9]{4}_[0-9]{2}_[0-9]{2}).tar.gz
    on voit apparait le groupe 1 : `2017_03_20`

    Donc en shell, je me dis que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TEST=AOC_532_2017_03_20.tar.gz
    echo $TEST | sed -e "s/\([0-9]{4}_[0-9]{2}_[0-9]{2}\).tar.gz/\1/"
    Explication par rapport au motif utilisé dans l'outil en ligne :
    - j'échape mes 2 parenthèses qui délimite mon sous groupe
    - \1 ==> j'affiche ou plutot je remplace ma chaine de caractère par une uniquement la valeur de mon sous groupe.


    Malheureusement la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $TEST | sed -e "s/\([0-9]{4}_[0-9]{2}_[0-9]{2}\).tar.gz/\1/"
    Me renvoie le nom complet de ma chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FTM_532_2017_03_20.tar.gz
    et non uniquement mon sous groupe (la date du fichier) :

  2. #2
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "AOC_532_2017_03_20.tar.gz" | egrep -o '[0-9]{4}_[0-9]{2}_[0-9]{2}'
    2017_03_20
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  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
    Et au cas ou tu le voudrais absolument avec sed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "AOC_532_2017_03_20.tar.gz" | sed -r 's/.*([0-9]{4}_[0-9]{2}_[0-9]{2}).*/\1/'
    2017_03_20
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $TEST | sed -r 's/.*([0-9]{4}_[0-9]{2}_[0-9]{2}).tar.gz/\1/'
    2017_03_20
    -e est à utiliser quand tu veux plusieurs substitution genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'aze' | sed -e 's/a//' -e 's/z//'
    e
    -r permet de faire des expressions régulières étendues et c'est ce que tu fais quand tu quantifies et crée des classes.

    préfère utiliser des simples quotes(') à des doublets quotes ("), ça évite l'interprétation et donc minimise le nombre de caractères à protéger/échaper.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    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 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Bonjour,

    On peut simplifier la regex en [0-9]{4}(_[0-9]{2}){2}
    Cordialement.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/08/2009, 11h08
  2. Réponses: 4
    Dernier message: 22/11/2008, 09h28
  3. Comment extraire la date d'un champ DATE_HEURE
    Par nikobell dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/07/2007, 00h51
  4. Réponses: 2
    Dernier message: 20/10/2006, 11h49
  5. Comment extraire des infos d'un fichier Word ?
    Par Raoul d'Andrésy dans le forum VBA Word
    Réponses: 4
    Dernier message: 02/12/2005, 18h20

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