Coller du texte au début avec sed/ed

Résolu
Little Black Cat -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai par exemple ce fichier:
donnee1
donnee2
donnee3
donnee a mettre au debut1
donnee a mettre au debut2
donnee a mettre au debut3
donnee4

et je veux mettre au début de mon fichier les 3 lignes ci-dessus.
Voilà ce que j'ai tenté, sans succès:
sed '/donnee a mettre au debut/! {H;d}; $G' fichier

Merci de m'aider à trouver la solution à ce petit problème

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Est-ce que les données à mettre au début seront toujours 3 lignes consécutives ?
    0
  2. Little Black Cat
     
    Merci pour la réponse rapide (comme toujours ;))

    En fait ce fichier a été trié et les lignes à mettre au début sont consécutives et commence toutes par le même motif (popup). Leur nombre, quoique petit, est inconnu à priori, il peut y en avoir une, ou deux (c'est pour construire un menu).
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Un peu trop complexe en mettre en oeuvre avec "sed" (et je ne sais même pas si c'est possible d'ailleurs), donc on va faire avec "ed" qui intègre une fonction de déplacement :

    jp@MDK:~/tmpfs ssh$ cat plop
    donnee1
    donnee2
    donnee3
    donnee a mettre au debut1
    donnee a mettre au debut2
    donnee a mettre au debut3
    donnee4
    
    jp@MDK:~/tmpfs ssh$ ed -s plop <<< $'v/debut/m$\nw'
    
    jp@MDK:~/tmpfs ssh$ cat plop
    donnee a mettre au debut1
    donnee a mettre au debut2
    donnee a mettre au debut3
    donnee1
    donnee2
    donnee3
    donnee4
    
    jp@MDK:~/tmpfs ssh$


    En gros, tout ce qui ne contient pas (v) le motif (/début/) est déplacé (m) en fin de fichier ($). On sauve le tout avec la commande "w".

    ;-))
    0
  4. Little Black Cat
     
    Merci pour cette réponse.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Little Black Cat
     
    >Un peu trop complexe en mettre en oeuvre avec "sed" (et je ne sais même pas si c'est possible d'ailleurs)

    Si, si et voici comment:

    #!/bin/sed -nf
    
    :a
    $!{/popup/ {p;bnext}
    {1h;1!H}
    :next
    n
    ba
    }
    {/popup/p
    H
    g
    p
    }


    j'enregistre ce qui ne doit pas apparaître en début de fichier pour ne l'afficher qu'à la fin.
    Il ne faut surtout pas utiliser la commande d sinon le fil des commandes n'est pas suivi.
    On enregistre la 1ère ligne et on ajoute les suivantes (sinon une ligne vide apparaît quand on colle la 2ème partie du fichier).

    Il est vrai que c'est un peu complexe. ;-)
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Chapeau bas et merci ;-))
      0
    2. Little Black Cat
       
      Je suis sincèrement très honoré pour ce compliment de votre part. Merci ;-)
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Il n'y a pas de quoi ;-))
      0