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

Linux Discussion :

remplacer chaîne de caractere par une autre


Sujet :

Linux

  1. #1
    Invité(e)
    Invité(e)
    Par défaut remplacer chaîne de caractere par une autre
    Bonjour,

    Je viens vers vous car la commande "sed" m'enerve trop:

    j'ai un fichier composé de 8 champs séparés par ":" et contenant les lignes suivantes:

    01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : daniel loiseau gamme,333436418-37,94310,orly

    01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : ede ruy,304914211-20,69200,venissieux

    01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : marcu havouis sonia simone,321149312-43,75011,paris 11

    sur le champ 8 qui est composé lui meme de 4 champs séparés par "," je veux garder que le 2eme chmp comme ceci:


    01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : 333436418-37

    01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : 304914211-20

    01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : 321149312-43

    j'ai essayé toutes les possibilité de remplacement mais toutes les formules ne marchent pas!! est ce que quelqu'un pourra m'aider svp??

  2. #2
    Membre régulier
    Avatar de debianhunter
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 87
    Points
    87
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\(.*\):[^,]*,\([^,]*\),.*/\1 : \2/'
    Pas de quoi s'enerver
    Sinon oocalc est bien aussi pour ce genre de traitemnt... ca depend a quel point on veut automatiser.

  3. #3
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut
    Bonjour les gars ,
    Citation Envoyé par debianhunter Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\(.*\):[^,]*,\([^,]*\),.*/\1 : \2/'
    merci debianhunter pour ton script sed , si t'as du temps peux-tu m'expliquer ton code car je peine encore avec sed

    la partie affichage pas de problème: /\1 : \2/ c'est un match des caractères entre \(.*\) mais l'expression regulière /\(.*\):[^,]*,\([^,]*\),.*/ est encore un peu flou

    merci

  5. #5
    Membre régulier
    Avatar de debianhunter
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Points : 87
    Points
    87
    Par défaut
    C'est plus un probleme d'expressions regulieres que de sed.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    \(.*\):      on prend tout .* et on l'enregistre  \(   \)  jusqu'a rencontrer deux points
    [^,]*        n'importe quel caractere sauf la virgule. [ ] permet de definir une liste de caracteres a utiliser alors que [^ ] permet de definir une liste de caracteres a proscrire.
    ,            la virgule dont on parle
    \([^,]*\)    de nouveau n'importe quel caractere sauf la virgule, mais on enregistre le resultat \(   \)
    ,            la virgule dont on parle
    .*           puis le reste.
    Il y a surement plus simple, par exemple en utilisant *? qui permet de prendre le moins de caracteres qui matchent possibles (* est 'greedy'), notamment pour la deuxieme partie (apres les deux points).

Discussions similaires

  1. remplacement d'un caractere par une chaine
    Par kayenne77 dans le forum Langage
    Réponses: 3
    Dernier message: 06/07/2009, 05h13
  2. Remplacer chaine de caractères par une autre chaine
    Par unmaxdemily dans le forum SAS Base
    Réponses: 2
    Dernier message: 25/06/2008, 09h11
  3. Réponses: 2
    Dernier message: 12/03/2008, 13h44
  4. Remplacer une chaîne de caractéres par une autre
    Par koKoTis dans le forum Linux
    Réponses: 6
    Dernier message: 15/10/2007, 09h00
  5. Réponses: 8
    Dernier message: 15/07/2006, 18h59

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