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 :

Changer la place d'une ligne avec motif


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut Changer la place d'une ligne avec motif
    Bonjour à tous,

    je cherche désespérement à inverser des lignes de mon fichier en fonction de motifs spécifiques. Voilà grossièrement ce que j'ai :

    toto
    titi
    titi
    titit
    tata
    toto
    titi
    titi
    titi
    tata

    Je voudrais réussir à placer toustes les occurences de "tata" en dessous de "toto". Sachant que dans mon fichier j'ai une occurence de toto pour une occurence de tata.

    Auriez vous une idée ? J'ai essayé de m'en sortir avec sed mais sans succès.

    Merci à vous.

  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
    $ cat plop 
    toto
    titi
    titi
    titit
    tata
    toto
    titi
    titi
    titi
    tata
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sed '/toto/{:z;N;/tata$/!bz;s/\([^\n]*[^\n]\)\(.*\)\(\n.*\)/\1\3\2/}' plop 
    toto
    tata
    titi
    titi
    titit
    toto
    tata
    titi
    titi
    titi

  3. #3
    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
    Encore plus simple avec "ed" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ ed -s plop <<<$'g/tata/m/toto/\n,p'
    toto
    tata
    titi
    titi
    titit
    toto
    tata
    titi
    titi
    titi
    Pour une modification in-place, utilise cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ ed -s plop <<<$'g/tata/m/toto/\nw'

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut
    Merci beaucoup zipe31. Quand je vois la commande sed je me dis que j'étais vraiment loin...

    Bonne soirée

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Bonsoir

    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
    18
    19
    20
    21
    22
    $ cat plop
    toto
    titi
    titi
    titit
    tata
    toto
    titi
    titi
    titi
    tata
    $ awk '/toto/{print;print "tata";next} /tata/{next} 1' plop
    toto
    tata
    titi
    titi
    titit
    toto
    tata
    titi
    titi
    titi
    [edit]
    Ou mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/toto/{print;print "tata";next} !/tata/' plop
    [/edit]

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

Discussions similaires

  1. Extraire une valeur d'une ligne avec sed
    Par jojolepabo dans le forum Linux
    Réponses: 6
    Dernier message: 27/10/2004, 09h34
  2. Réponses: 8
    Dernier message: 14/05/2004, 11h18
  3. [FP]Tracer Une ligne avec Dev-pascal
    Par yffick dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/12/2003, 16h33
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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