Forum Programmation.autre Expression régulière

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
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  (site Web personnel) . É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
    

Suivre le flux des commentaires

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