Déplacer une ligne avec Sed

ksalt Messages postés 2 Date d'inscription   Statut Membre -  
ksalt Messages postés 2 Date d'inscription   Statut Membre -
Bonjour,

Malgré de nombreux essais, je ne parviens pas à déplacer une ligne dans un fichier texte avec sed.
Exemple de contenu du fichier texte :

aa
bb
cc
dd
ee
ff
ccc
gg

Je voudrais tout simplement déplacer la ligne n° 7 ('ccc') après la ligne n° 3 ('cc'). Je recherche une commande équivalente à la commande ex 'vim' :7m3.

Merci par avance.

2 réponses

  1. dieu
     
    puisque tu connais vi pourquoi faire avec sed ? A moins que tu ignores encore que toute commande qui a des commandes internes est scriptable sous tous les unix ....

    la methode de scriptage avec vi se fait par la commande vi -c "corp du script" fichier_à_traiter

    exemple :

    SIUNIXS2:root # cat > /tmp/FP
    aa
    bb
    cc
    dd
    ee
    ff
    ccc
    gg
    SIUNIXS2:root #
    SIUNIXS2:root # vi -c "7m 3|:wq" /tmp/FP
    "/tmp/FP" 8 lignes, 25 caractères. "/tmp/FP" 8 lignes, 25 caractères.
    SIUNIXS2:root # cat /tmp/FP
    aa
    bb
    cc
    ccc
    dd
    ee
    ff
    gg
    SIUNIXS2:root #
    0
  2. dieu
     
    Moving a line to the start of the file
    EG
    something1 this
    something2 ====> something1
    this something2
    something3 something3

    sed -n '
    /this/!H # if no match append to hold space
    /this/{x; H; } # found so exhange and append (prepend)
    ${g; s/\n//; p; }' <infile # if last line get and print hold
    OR
    sed '1,/this/{ # until found
    /this/!{H; d; } # if not it put in hold (no print)
    G; s-\n--; }' infile # output hold - continue print with the rest

    voilà la solution sed tirée de mon truc & astuces. suffit d'ajouter le forçage de numero de ligne pour placer la ligne coupé ou tu veux .
    0
    1. ksalt Messages postés 2 Date d'inscription   Statut Membre
       
      Grand merci de tes réponses.

      1°) La référence à 'vi' que j'évoquais dans mon message était un exemple, simple, de ce que je veux effectuer. Mais je souhaite utiliser 'sed' car j'ai d'autres commandes (lesquelles fonctionnent parfaitement) de cet éditeur à mettre en oeuvre sur le fichier en entrée.

      2°) Peux-tu expliciter la (les) procédure(s) de ton second message, en prenant pour référence les numéros de ligne du fichier en entrée. Désolé, mais je dois te dire que les essais effectués n'aboutissent pas afin d'obtenir exactement en sortie la séquence :
      aa
      bb
      cc
      ccc
      dd
      ee
      ff
      gg

      Je te remercie de nouveau par avance.
      0