Forum Programmation.autre Expression régulière

Posté par . Licence CC by-sa
Tags : aucun
2
11
fév.
2016

Bonjour, j'ai des fichiers qui contiennent des lignes de la forme

11201509180811G
EUX11_002-2015/09/19 9:23:13.4 0

2015/09/19 15:23:07.0
2015/09/18 8:00:00.0 2015/09/19 8:00:00.0 1

2015/09/19 9:23:13.4 21601.68 21592.96

Dans ces lignes je voudrai d'abord détecter les lignes qui contiennent une date/heure (comme celle-ci 2015/09/18 8:00:00.0).
Ensuite, je veux vérifier que l'heure est bien écrite sur 2 chiffres. Par exemple "9:23:13.4" devrait se transformer en "09:23:13.4". Par contre "2015/09/19 15:23:07.0" ne doit pas se transformer en "2015/09/19 015:23:07.0".

J'imagine que le meilleur outil pour faire ça est un "sed" avec l'expression régulière qui va bien mais j'avoue ne rien y comprendre et à chaque fois que j'essaie d'étudier comment ça marche, je m'arrache les cheveux …
J'imagine qu'il faut chercher le motif "/xx_x:" où x est un chiffre entre 0 et 9 et "_" désigne un blanc. Normalement le nombre de caractères entre "/" et ":" doit être de 5 ; s'il est de 4 alors c'est qu'il manque un 0.
Donc si une bonne âme pourrait me venir en aide, je lui en serais très reconnaissante.
Merci d'avance.

  • # Proposition

    Posté par (page perso) . Évalué à 9.

    $ cat data|sed 's%\(/[0-9][0-9]\) \([0-9]\):%\1 0\2:%g'
    EUX11_002-2015/09/19 09:23:13.4 0                                  
    2015/09/18 08:00:00.0 2015/09/19 08:00:00.0 1           
    2015/09/19 09:23:13.4  21601.68       21592.96
    
    • [^] # Re: Proposition

      Posté par (page perso) . Évalué à 5.

      ou

      sed 's%\(/[0-9][0-9]\) \([0-9]\):%\1 0\2:%g' data

      If you choose open source because you don't have to pay, but depend on it anyway, you're part of the problem.evloper) February 17, 2014

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.