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 :

Script shell avec sed et expression réguliere


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 58
    Par défaut Script shell avec sed et expression réguliere
    Bonjour,

    J'ai un petit souci j'ai un fichier avec beaucoup de ligne dy type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2015-12-20 12:12:30,200
    2015-12-20 12:12:32,300
    ....
    je souhaiterais remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2015-12-20;12:12:30,200
    2015-12-20;12:12:32,300
    ....
    en utilisant une expression réguliere avec sed

    mon script bash est de se type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Subst='-'
    Rep=';'
    echo $Subst
    echo $Rep
    sed 's/([0-9])$Subst([0-9])/\\1$Rep\\3/g' sed-rep
    le sed renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2015-12-20 12:12:30,200
    2015-12-20 12:12:32,300
    ....
    Quelle est le problème?

    Merci d'Avance pour votre aide.
    Cordialement

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    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 335
    Par défaut
    Bonjour,

    Tu encadres ta commande sed par des simples quotes et dans ce cas, les variables ne sont pas interprétées.
    Remplace ces simples quotes par des double-quotes ( " ) et cela fonctionnera peut-être (en tout cas, tes variables seront interprétées.

    Rajout: bon après, ton sed est un peu faux, il faut protéger les parenthèses mais pas les backslash des arguments.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 58
    Par défaut
    Bonjour Qu'est ce qui est faux exactement dans mon sed

    Ce que je souhaite faire :
    Remplacer les espaces par un ; sur les structures de type AAAA-MM-JJ HH:MM:SS,mmm par AAAA-MM-JJ;HH:MM:SS

    J'ai donc besoin d'une expression régulière mais je n'arrive pas à la structurer correctement.
    J'ai lue que l'on pouvait la réutilisé dans la parti remplacement . Quelle est la meilleur solution.

    Merci d'avance pour vos réponse

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    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 335
    Par défaut
    Ok,

    Ta date de départ est sous sa forme complète:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\},[0-9]\{1,3\}
    Ce qui m'intéresse c'est de remplacer l'unique espace par un ';' , je vais donc avoir besoin de 2 arguments qui contiendront les valeurs de droites et de gauche de l'espace, donc pour cela , il y a l'encadrement par des parenthèses, ce qui nous donne pour l'argument 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)
    et pour le 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\},[0-9]\{1,3\}\)
    et donc, la ligne sed donnera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\) \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\},[0-9]\{1,3\}\)/\1;\2/g' sed-rep
    ici, le g est facultatif, si tu n'as qu'une seule date de ce type à modifier par ligne.
    après si tu veux utiliser des variables dans ton sed, l'écriture se fait avec des double-quote:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Subst=' '
    Rep=';'
    echo $Subst
    echo $Rep
    sed "s/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)${Subst}\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\},[0-9]\{1,3\}\)/\1${Rep}\2/g" sed-rep
    Après dans la pratique, aux éléments que tu donnes, un simple sed 's/ /;/' est suffisant puisqu'il n'y a qu'un seul espace sur tes lignes
    d'exemple...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 58
    Par défaut
    Merci beaucoup

    Ta solution marche à merveille et mon fichier etait plus compliqué cela.

    Florian

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

Discussions similaires

  1. script shell avec sed
    Par zorooo dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 15/12/2009, 13h00
  2. script shell avec sed
    Par Eye4eye dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 13/10/2008, 21h26
  3. Script Shell avec fonction FTP
    Par blackstreet dans le forum Distributions
    Réponses: 1
    Dernier message: 18/09/2007, 09h33
  4. Script shell avec HTML avec warning
    Par ab_2006 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 05/10/2006, 13h15
  5. Un script shell avec nombre d'argument variable
    Par lastrecrue dans le forum Linux
    Réponses: 1
    Dernier message: 28/05/2006, 11h35

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