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 :

extraire une partie de chaine avec une seule ligne de commande sed


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 46
    Points : 39
    Points
    39
    Par défaut extraire une partie de chaine avec une seule ligne de commande sed
    Bonjour tout le monde,

    J'ai une petite souci d'extraire une partie de sous chaine avec sed

    voici mon exemple:

    fichier origine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ;Type de modèle :;;;;;Pièce comptable;;;;;;;;;;;
    ;Style de modèle :;;;;;Pièce unique;;;;;;;;;;;
    ;Entité comptable:;;;;;France-Printemps;;;;;;;;;;;
    ;B. données :;;;;;PRODUCTION;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;
    ;Catégorie;;;;;;;Liste - Texte:;FRP_ABN;;;;;;;;
    ;Origine;;;;;;;Liste - Texte:;Tableur;;;;;;;;
    ;Devise;;;;;;;Liste - Texte:;EUR;;;;;;;;
    ;Date comptable;;;;;;;Liste - Date:;31/05/2009;;;;;;;;
    je voudrais bien supprimer des ";" et remplacer ":" par "|"

    la sortie:

    Type de modèle | Pièce comptable
    Style de modèle | Pièce unique
    Entité comptable | France-Printemps
    B. données | PRODUCTION
    Catégorie Liste - Texte| FRP_ABN
    Origine Liste - Texte| Tableur
    Devise iste - Texte| EUR
    Date comptable Liste - Date | 31/05/2009

    est-ce qu'il y a une possibilité de le faire avec une seule ligne de commande?
    maintenant, je fais avec deux lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sed 's/;//g'  >/users/cgey/YINGNAN/ADI_first_2.csv  /users/cgey/YINGNAN/ADI_first.csv
     
    sed 's/:/|/g' >/users/cgey/YINGNAN/ADI_first.csv >/users/cgey/YINGNAN/ADI_first_2.csv

  2. #2
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Bonjour,

    Si tu arrives à le faire en 2 commandes, tu peux le faire en 1 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/;//g' fichier_d_entrée | sed 's/:/|/g' > fichier_de_sortie

  3. #3
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Encore plus loin que lavazavio (c'est fort de café! ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i -e 's/;//g' -e 's/:/|/g' fichier
    Edit: On peut ajouter encore une transformation pour supprimer les lignes vides:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i -e 's/;//g' -e 's/:/|/g' -e '/^$/d' fichier

  4. #4
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut

    Je voulais juste montrer l'utilisation du pipe...

    Tu m'as battu !

  5. #5
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Je ne crois pas que qui que ce soit soit battu: c'est en observant les questions et les réponses que cela me donne du recul et d'autres idées (que je n'aurais pas eues tout seul!). Et puis avec les man pages et quelques essais, des solutions nouvelles apparaissent parfois...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 46
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup tous les deux!! C'est niquel!!!!

  7. #7
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Encore un peu plus de concision dans l'appel de sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's/;//g; s/:/|/g; /^$/d' fichier
    Remarquez que les trois règles (en bleu) sont dans la même option (délimitée par les quotes simples), séparées par un point-virgule (en rouge).

Discussions similaires

  1. Report d'une partie de tache avec une plage horaire
    Par phileasdav dans le forum Excel
    Réponses: 7
    Dernier message: 01/12/2014, 11h51
  2. Réponses: 22
    Dernier message: 11/07/2014, 17h08
  3. afficher une zone de texte avec une partie dynamique
    Par sheridan08 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/04/2013, 14h56
  4. Réponses: 5
    Dernier message: 08/06/2011, 21h43
  5. Comment extraire une partie d'URL avec REGEX?
    Par STB_Fk dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2007, 12h59

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