SED: copier/coller plusieurs lignes

Greg -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

un truc tout bete a faire mais je n'arrive pas a trouver:
comment copier plusieurs lignes et les coller a un autre endroit dans le fichier ? Tout ca en utilisant SED (de preference) et en effectuant la meme action sur plusieurs fichiers a la fois.

Merci d'avance !

Greg
Configuration: Ubuntu 9.10
Firefox 3.5.7

8 réponses

  1. Greg
     
    Merci pour ton exemple tres clair jipicy !

    Si je comprends bien, "3N" permet de lire la 3eme ligne et la ligne suivante, "h" copie en memoire et ensuite "4G" colle ce qui a ete copie apres la 4eme ligne.

    Comment faire maintenant si je veux copier un bloc de plusieurs lignes et pas seulement 2 lignes ? J'ai essaye de jouer avec la commande "N" mais en vain.... et la lecture du manuel de sed ne m'eclaire pas plus...

    Encore merci !
    1
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Comment faire maintenant si je veux copier un bloc de plusieurs lignes et pas seulement 2 lignes ? J'ai essaye de jouer avec la commande "N" mais en vain.... et la lecture du manuel de sed ne m'eclaire pas plus...
    D'où ma demande d'exemple concret, à chaque cas sa syntaxe (même si des syntaxes généralistes peuvent être appliquées) ;-((

    Pour généraliser, il faut ajouter chaque ligne suivante en testant l'existence (ou pas, ça dépend des cas) d'un motif dans la dernière ligne à prendre en compte, à l'aide d'une boucle...

    Voir :
    Introduction à Sed - Part I
    Introduction à Sed - Part II
    Introduction à Sed - Part III
    1
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Exemple AVANT => APRES, merci ;-)
    0
    1. soukafa
       
      salut svp aider moi c urgent
      j'ai un fichier ou j'ai plusieurs lignes
      je voulais utiliser awk ou sed pour copier des lignes et les coller dans la ligne précédente par exemple
      *A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL
      /NCEN/SFRE/234f.kdv/
      /KZUEOKZ/Z;HDIO/
      /NU=572
      *A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL
      /NCEN/SFRE/234f.kdv/
      /KZUEOKZ/Z;HDIO/
      /NU=572
      suivant
      suivant
      ............

      maintenant je voudrais avoir au finish
      *A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL /NCEN/SFRE/234f.kdv//KZUEOKZ/Z;HDIO//NU=572
      *A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL /NCEN/SFRE/234f.kdv//KZUEOKZ/Z;HDIO//NU=572


      est ce que quelqu'un peut m'aider svp
      truc urgent
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Si c'est toujours le même schéma (1 ligne commençant par * suivie de 3 lignes), cette syntaxe devrait faire l'affaire :

      sed '/^\*/N;N;N;s/\n//g'
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Et si ce n'est pas le même schéma et que le nombre de lignes suivantes est inconnu, cette syntaxe là devrait aller...

      sed ':z;/^\*/N;/\n\*/!s/\n//;tz;P;D'
      0
  4. Greg
     
    Desole mais je seche completement, c'est pour cela que je n'ai propose aucune solution. Je me doute qu'il faut utiliser les commandes H et G de sed, mais aucune idee comment...
    Quelqu'un aurait-il un tuyau a me donner ? Merci d'avance !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Non, je te demande un exemple concret de fichier à modifier.
    0
  7. Greg
     
    Ok, desole j'avais mal compris ;)

    Voici donc le contenu ultra-simplifie d'un fichier avant et apres le copier-coller que j'aimerais effectuer. Les lignes 3 et 4 ont ete dupliquees.

    Fichier initial:

    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    eeeeeee

    Fichier apres copier/coller:

    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    cccccccc
    ddddddd
    eeeeeee

    Il s'agit toutefois de realiser ce copier-coller sur une multitude de fichiers simultanement (les lignes a copier-coller sont toujours au meme endroit dans les differents fichiers).

    Merci pour ton aide jipicy !
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [tmpfs]$ cat plop bar foo
    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    eeeeeee
    
    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    eeeeeee
    
    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    eeeeeee
    
    [tmpfs]$ sed -s -i.bak '3N;h;4G' *
    
    [tmpfs]$ cat plop bar foo
    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    cccccccc
    ddddddd
    eeeeeee
    
    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    cccccccc
    ddddddd
    eeeeeee
    
    aaaaaaa
    bbbbbbb
    cccccccc
    ddddddd
    cccccccc
    ddddddd
    eeeeeee
    
    [tmpfs]$  

    ;-))
    0
  9. Greg
     
    Ok merci pour le tuyau, c'est vraiment sympa ! Je vais me plonger dans cette intriduction a Sed, j'ai encore pas mal a apprendre ;)

    Bonne journee !
    0