Forum Programmation.shell inserer des lignes en debut de fichier

Posté par  .
Étiquettes : aucune
1
13
nov.
2008
Bonjour,

Je débute dans la programmation shell et les commandes Linux.
J'aimerai prendre une partie d'un fichier (la fin à partir d'une certaine ligne) pour la copier au début d'un autre fichier.

J'ai trouvé ceci qui marche tres bien pour ne selectionner qu'une partie de mon fichier :
sed -ne 'mon_motif :/,$ p' < ./temp/tmp.log

Mais comment puis-je faire pour inserer ces lignes au début d'un autre fichier. Je sais que peux utiliser la commandes sed -i mais je ne peux pas imbriquer 2 fois la meme commande ?

Je ne suis pas sure d'avoir été tres claire mais si quelqu'un a compris mon problème....

Merci
  • # à l'ancienne

    Posté par  . Évalué à 4.

    salut,

    insérer des lignes au début d'un fichier, ça revient à remplacer le contenu du fichier par les lignes à insérer, suivies de l'ancien contenu...

    # on renomme le fichier de log
    mv ./temp/tmp.log ./temp/tmp.log.bak
    touch ./temp/tmp.log
    # ... tes commandes qui écrivent dans ./temp/tmp.log ...
    # on remet l'ancien contenu
    cat ./temp/tmp.log.bak >> ./temp/tmp.log


    Ce n'est pas très optimisé, mais pour quelques centaines de lignes c'est largement suffisant.

    Sinon avec sed :

    sed -i 1i$(ton code) ./temp/tmp.log
    • [^] # Re: à l'ancienne

      Posté par  . Évalué à 1.

      Merci pour les infos je vais essayer ça.
    • [^] # Re: à l'ancienne

      Posté par  . Évalué à 0.

      Merci pour les infos je vais essayer ça.
    • [^] # Re: à l'ancienne

      Posté par  (site web personnel) . Évalué à 1.

      Je crains que la seconde solution ne marche pas, quand on insère plusieurs lignes avec la commande i, toutes les lignes sauf la dernière doivent être terminées par un \ ; il faudrait aussi entourer la construction $(...) par des doubles quotes pour empêcher le shell de la découper aux espaces...

      Par ailleurs, la commande 1i... va se retrouver comme argument de l'option -i, il faut insérer -e entre l'option -i sans argument et la commande Sed.


      La première solution est évidemment plus simple (et plus lisible :), mais on peut, avec l'aide de Bash, emboîter deux (GNU) Seds :


      ~ $ sed -i.old -e '1{h;r '<(sed -e '/^t/,$!d' fic2)'
      d};2{x;G}' fic1

      ~ $ cat fic2
      === fic2 ===

      alpha
      bravo
      tagada
      delta

      ~ $ diff fic1.old fic1
      0a1,3
      > tagada
      > delta
      >



Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.