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 :

Commande sed pour remplacer les points des dates par des slash


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut Commande sed pour remplacer les points des dates par des slash
    Hello tout le monde,

    Dans mon fichier j'ai des dates sous la forme dd.mm.yyyy que je voudrais transformer en dd/mm/yyyy
    voici un exemple de ligne dans mon fichier :Nom : file.jpg
Affichages : 74
Taille : 39,1 Ko

    J'ai essayé ceci mais ça ne fonctionne absolument pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\([0-9]{2}\).\([0-9]{2}\).\([0-9]{4}\)\/\([0-9]{2}\)\/\([0-9]{2}\)\/\([0-9]{4}\)/g'
    Est-ce que vous pouvez éclairer ma lanterne svp

    Un tout grand merci

    Greg
    [Il était une fois Delphi ....]


  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 235
    Points : 13 224
    Points
    13 224
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par Flodelarab Voir le message

    Bonjour Flodelarab et merci de ta réponse.
    Le problème c'est que tous les '.' du fichier sont remplacés par des '/' mais ce n'est pas ce que je veux.

    Je veux remplacer les '.' uniquement quand il s'agit de cette suite : dd.mm.yyyy
    [Il était une fois Delphi ....]


  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 235
    Points : 13 224
    Points
    13 224
    Par défaut
    Citation Envoyé par zemeilleurofgreg Voir le message
    Je veux remplacer les '.' uniquement quand il s'agit de cette suite : dd.mm.yyyy
    Et bien, fais-le. Courage !

    NB: dans ton premier message, tu n'as même pas dit à sed par quoi il fallait remplacer la regex.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Et bien, fais-le. Courage !

    NB: dans ton premier message, tu n'as même pas dit à sed par quoi il fallait remplacer la regex.
    Eh bien ... merci de ta bienveillance !
    Mais je crois que le sujet de cette discussion est "Commande sed pour remplacer les points des dates par des slash" --> explicite non ?

    Mais bon soit... Merci à ceux qui voudrons bien m'apporter leur aide ;-)
    [Il était une fois Delphi ....]


  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 548
    Points : 30 670
    Points
    30 670
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par zemeilleurofgreg Voir le message
    J'ai essayé ceci mais ça ne fonctionne absolument pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\([0-9]{2}\).\([0-9]{2}\).\([0-9]{4}\)\/\([0-9]{2}\)\/\([0-9]{2}\)\/\([0-9]{4}\)/g'
    Est-ce que vous pouvez éclairer ma lanterne svp
    Tu as deux soucis dans ta commande
    1. les accolades qui symbolisent la répétition doivent être protégées
    2. les mémoires des éléments trouvés (les éléments parenthésés) ne sont pas réutilisées. Or si on mémorise un pattern c'est à priori pour le réutiliser.

    On peut aussi parler du "point" qui symbolise "n'importe quoi" et qui pourrait être source de conflit...
    sed -e "s/\([0-9]\{2\}\)\.\([0-9]\{2\}\)\.\([0-9]\{4\}\)~/\1\/\2\/\3~/g" le_fichier.

    PS: je me suis calé sur le "~" qui semble suivre toutes les dates (plus on donne de précisons mieux c'est) mais c'est facultatif...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 022
    Points : 4 266
    Points
    4 266
    Par défaut
    bonjour
    Citation Envoyé par Sve@r Voir le message
    plus on donne de précisons mieux c'est
    Mais vu ce qu'il donne (Merci pour la copie écran ), on peut opter aussi pour un peu plus de simplicité (s'il peut la modifier dans 1 an)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -E "s|([0-9])\.([0-9]{2})\.|\1\/\2\/|g"
    $moi= ( !== ) ? : ;

  8. #8
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Tu as deux soucis dans ta commande
    1. les accolades qui symbolisent la répétition doivent être protégées
    2. les mémoires des éléments trouvés (les éléments parenthésés) ne sont pas réutilisées. Or si on mémorise un pattern c'est à priori pour le réutiliser.

    On peut aussi parler du "point" qui symbolise "n'importe quoi" et qui pourrait être source de conflit...
    sed -e "s/\([0-9]\{2\}\)\.\([0-9]\{2\}\)\.\([0-9]\{4\}\)~/\1\/\2\/\3~/g" le_fichier.

    PS: je me suis calé sur le "~" qui semble suivre toutes les dates (plus on donne de précisons mieux c'est) mais c'est facultatif...
    Hello Sve@r,

    Un tout grand merci pour ta réponse qui m'a permis d'apporter la solution à mon problème mais aussi et surtout à tes explications grâce auxquelles je comprend maintenant un peu mieux la mécanique de la commande sed.

    [Il était une fois Delphi ....]


  9. #9
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    Mais vu ce qu'il donne (Merci pour la copie écran ), on peut opter aussi pour un peu plus de simplicité (s'il peut la modifier dans 1 an)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -E "s|([0-9])\.([0-9]{2})\.|\1\/\2\/|g"
    Merci aussi à toi papajoker,

    effectivement on peut se passer de l'année et utiliser un autre délimiteur, ce qui simplifie l'écriture
    [Il était une fois Delphi ....]


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

Discussions similaires

  1. Comment trouver les points des inflections pour une courbe
    Par mihaispr dans le forum Mathématiques
    Réponses: 3
    Dernier message: 30/09/2009, 15h25
  2. [CSV] Remplacer les points par des virgules
    Par johnkro dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2008, 20h25
  3. commande sed pour supprimer des commentaires
    Par Garulfo dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 08/03/2008, 20h09
  4. Encore une histoire pour remplacer les points
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/08/2007, 12h41

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