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 :

Dupliquer et modifier chaque ligne (si possible avec sed)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut Dupliquer et modifier chaque ligne (si possible avec sed)
    Bonjour,
    est-il possible avec "sed" de dupliquer chaque ligne et de faire une substitution différente sur chacune des 2 copies?
    Exemple. Mon fichier d'entrée contient:
    Je veux transformer un coup le "=" en "x=x" et un autre coup en "y=y" de manière à obtenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Ax=xB
    Ay=yB
    Cx=xD
    Cy=yD
    Ex=xF
    Ey=yF
    Si c'est trop compliqué en "sed", je passerai à "awk".
    Merci d'avance
    )jack(

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ cat plop
    A=B
    C=D
    E=F
     
    $ sed 's/=/x&x/;h;s/x/y/g;H;g' plop 
    Ax=xB
    Ay=yB
    Cx=xD
    Cy=yD
    Ex=xF
    Ey=yF
     
    $

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Pas mal... et carrément top rapide!
    En fait, les 2 substitutions indiquées ne sont qu'un exemple.
    Si la 2ème substitution est trop difficile à faire après l'exécution de la 1ère, est-il possible de "mémoriser/rappeler" la ligne originale pour lui appliquer la 2ème substitution seule?
    ou, dit autrement, quelle combinaison de "h" "H" ou je ne sais trop quoi faut-il mettre autour de s/=/x&x/ et s/=/y&y/ pour arriver au même résultat?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Si la 2ème substitution est trop difficile à faire après l'exécution de la 1ère, est-il possible de "mémoriser/rappeler" la ligne originale pour lui appliquer la 2ème substitution seule?
    ou, dit autrement, quelle combinaison de "h" "H" ou je ne sais trop quoi faut-il mettre autour de s/=/x&x/ et s/=/y&y/ pour arriver au même résultat?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ sed 'h;s/=/x&x/;x;s/=/y&y/g;H;g' plop 
    Ax=xB
    Ay=yB
    Cx=xD
    Cy=yD
    Ex=xF
    Ey=yF
     
    $
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ sed 'h;s/=/x&x/;x;s/=/y&y/g;x;G' plop 
    Ax=xB
    Ay=yB
    Cx=xD
    Cy=yD
    Ex=xF
    Ey=yF
     
    $

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Les explications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    h      
    On sauvegarde une copie dans la mémoire secondaire
                                    
    s/=/x&x/      
    On modifie l'original
                             
    x      
    On échange le contenu des mémoires
                                    
    s/=/y&y/g         
    On modifie la copie
                         
    H            
    On ajoute le contenu de la mémoire principale au contenu de la mémoire secondaire
                              
    g
    Et on écrase le contenu de la mémoire principale avec le contenu de la mémoire secondaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    h    
    On sauvegarde une copie dans la mémoire secondaire
                                      
    s/=/x&x/      
    On modifie l'original
                            
    x      
    On échange le contenu des mémoires
                                    
    s/=/y&y/g      
    On modifie la copie
                            
    x   
    On échange à nouveau le contenu des 2 mémoires
                                       
    G 
    Et on ajoute le contenu de la mémoire secondaire à la principale.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Les explications :
    snip
    Magnifique!
    Je vérifie les contraintes habituelles (le "sed" d'AIX n'aime pas les ";")
    et j'ai plus qu'à faire rentrer mon bazar là-dedans!

    )jack(

    PS: je vous dis pas le nombre de posts de zipe31 que j'ai ajoutés dans mon dossier de bookmarks "sed hints".
    Encore merci pour toutes ces précieuses explications!
    Si quelqu'un a un jour le courage de regrouper tous ces "plop", qu'il n'hésite pas!
    Une collection de petits exemples est parfois plus intéressante qu'un tutoriel (pour les gens pressés... (et qui ne l'est pas?))

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

Discussions similaires

  1. Dupliquer et modifier une ligne
    Par belloro dans le forum AIX
    Réponses: 1
    Dernier message: 12/03/2014, 10h39
  2. [MySQL] Icône "modifier" en bout de chaque ligne
    Par djoumusic dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 15/06/2009, 06h54
  3. Réponses: 0
    Dernier message: 04/02/2009, 11h16
  4. Combobox avec une image devant chaque ligne
    Par vexal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 09/02/2008, 12h22
  5. Modifier une ligne avec layout:collection
    Par imane_bennouna dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/05/2007, 14h47

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