Bash : insertion d'une ligne dans un fichier

Johny jon -  
 Lemez -
Bonjour à tous,

voilà je désirerai insérer une ligne tout au début d'un fichier. j'ai tenté le :
echo bonjour >> monfichier.txt

mais bien entendu, il ajoute bonjour à la fin du fichier, alors que je voudrai l'ajouter tout au debut du fichier.

Voilà si vous pouviez me renseigner je vous en serais gré :)

Merci d'avance

Johny Jon

11 réponses

  1. informaticien.re
     
    Bonjour
    vieux sujet mais dans le top réponse des sujet
    sed insertion d'une ligne en début de fichier

    comme la réponse ne m a pas semblé claire
    je me permet donc quelques explication
    à toute fin utiles

    explication avec l'utilisation de la commande
    magique SED

    sed -i "1i\Ajout de cette ligne en début de fichier\n" fichier.txt

    sed = Stream EDiteur
    -i = appliquer directement au fichier sans fichier temporaire
    Note : -i.BAK = création d'un fichier de sauvegarde fichier.txt.BAK
    " = permet l utilisation de caractère d'échappement
    et l'interprétation des variables dans la chaine.
    Note : l'utilisation de la ' (simple cote) désactive ces fonctions.
    1=numéro de ligne avant laquelle sera inséré le texte
    \ = caratere d échappement qui protège le texte qui sera inséré
    évite que le premier caractère du texte ne soit interprété
    comme une commande/paramètre
    29
    1. PSSGd1
       
      En fait sa commande est fausse :
      sed -i '1iSalut' essai.txt devient : sed -i 1i'Salut' essai.txt

      je sais que je fais un UP de plusieurs année mais moi ça viens de me servir,
      Cordialement
      0
      1. Lemez > PSSGd1
         

        Merciiiii

        0
    2. eloodie
       
      Merci !
      0
    3. hevoilajegalèrencor Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
       
      salut je déterre le sujet parce que vous vous prenez la tête avec les commandes particulières et dédiées. un ECHO fait l'affaire :

      echo "mon texte" >> mon_fichier

      c'est tout bisou
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > hevoilajegalèrencor Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
         
        Salut,

        Dans ton cas, faut juste apprendre à lire ;-(

        j'ai tenté le :
        echo bonjour >> monfichier.txt

        mais bien entendu, il ajoute bonjour à la fin du fichier, alors que je voudrai l'ajouter tout au debut du fichier.
        1
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Tu peux faire ça avec le filtre "sed", c'est très simple et tout c*n :
    [jp@Mandrake tmpfs]$ cat essai.txt
    Bonjour à tous,
    
    voilà je désirerai insérer une ligne tout au début d'un fichier. j'ai tenté le :
    echo bonjour >> monfichier.txt
    
    mais bien entendu, il ajoute bonjour à la fin du fichier, alors que je voudrai l'ajouter tout au debut du fichier.
    
    Voilà si vous pouviez me renseigner je vous en serais gré :)
    
    Merci d'avance
    
    Johny Jon
    
    
    [jp@Mandrake tmpfs]$ sed -i '1iSalut' essai.txt
    
    
    [jp@Mandrake tmpfs]$ cat essai.txt
    Salut
    Bonjour à tous,
    
    voilà je désirerai insérer une ligne tout au début d'un fichier. j'ai tenté le :
    echo bonjour >> monfichier.txt
    
    mais bien entendu, il ajoute bonjour à la fin du fichier, alors que je voudrai l'ajouter tout au debut du fichier.
    
    Voilà si vous pouviez me renseigner je vous en serais gré :)
    
    Merci d'avance
    
    Johny Jon
    [jp@Mandrake tmpfs]$
    En gros pour insérer un texte avant une ligne on donne son adresse, ici la ligne 1, suivi du paramètre "i" (pour insérer).
    L'option "-i" de "sed -i", est là uniquement pour écrire directement dans le fichier sans passer par un fichier temporaire.
    12
    1. Johny jon
       
      salut,

      alors j'ai tenté la commande sed comme dans ton exemple mais le résutat que j'ai ensuite dans mon fichier est :

      1isalut
      Bonjour,
      1isalut
      test pour voir


      Il m'insère 1isalut entre chaque ligne. Je suis en train de voir pour modifier mais si quelqu'un a une réponse je suis preneur aussi :)

      Merci à tous
      0
  3. chuchyyy
     
    cp monfichier.txt temp0001.tmp
    echo bonjour > monfichier.txt
    cat temp0001.tmp >>monfichier.txt
    rm temp0001.tmp

    Voici la solution finale.

    Ciao

    Guillaume
    4
  4. tom
     
    c'est :
    sed 1i"message" fichier

    moi je suis emmerdé pour mettre un message au début de chaque ligne parce que sed i"message" fichier écrit le message entre chaque ligne et non au début de chaque ligne :(
    2
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Bonjour,

      À lire d'abord ;-))

      Pour ton cas, en reprenant tes dires :
      [jp@MDK tmpfs]$ cat fich.txt
      
      c'est :
      sed 1i"message" fichier
      
      moi je suis emmerdé pour mettre un message au début de chaque ligne
      parce que sed i"message" fichier écrit le message
      entre chaque ligne
      et non au début de chaque ligne :(
      
      [jp@MDK tmpfs]$ sed 's/.*/Message &/' fich.txt
      
      Message c'est :
      Message sed 1i"message" fichier
      Message
      Message moi je suis emmerdé pour mettre un message au début de chaque ligne
      Message parce que sed i"message" fichier écrit le message
      Message entre chaque ligne
      Message et non au début de chaque ligne :(
      
      [jp@MDK tmpfs]$
      ;-))
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sam3000 Messages postés 1226 Statut Membre 144
     
    désolé, j'ai repondu en DOS (alors que tu voulais du BASH)
    bon, j'ai oublié linux (ça fais 5 ans que j'y ai pas touché)
    mais en gros
    ren -> pour renommer ou deplacer (mv??)
    type -> cat
    del -> effacer un fichier (unln, erase???)
    0
    1. Johny jon
       
      salut sam,

      lol ok je vois l'astuce. Compliqué pour une si petite chose : enfin avec la programmation je me pose plus de questions :)

      Encore Merci pour ton aide :)
      0
  7. sam3000 Messages postés 1226 Statut Membre 144
     
    de rien,
    mais si tu peut mettre une solution fonctionnelle pour bash, ça pourrais aider les autres apres!
    (c'est pour le futur)
    et si tous marche, n'oublit pas de cloturer le post
    @+
    -2
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Peux-tu donner la commande exacte que tu tapes, s'il te plaît.
    Affiche aussi la version de "sed" (sed -V).
    -2
  9. Botojo Messages postés 9 Statut Membre 51
     
    Bonjour,
    Pour ajouter une ligne en début de fichier:

    cp lefichier.txt temp
    cat - temp <<< "Swing la bacaisse dans le fond d'la boite à bois "> lefichier.txt

    ...
    ...
    ...
    rm temp

    Moi c'est la méthode que j'utilise
    Bonne chance!
    -2
  10. toto
     
    N'existe-t-il pas une commande pour insérer une ligne en début de fichier sans passer par un fichier temporaire?
    -2
    1. toto
       
      Bon apparemment non. C'est dû au système de fichier..

      Ou alors il faudrait aller jouer directement avec les i-nodes...


      Si quelqu'un a quand même une solution.
      0
      1. Gaston > toto
         
        La reponse est :

        sed -i 1i"premiere ligne" fichier.txt

        Et si tu veux insérer en 8eme ligne :
        sed -i 8i"premiere ligne" fichier.txt

        l'option -i indique qu'il faut modifier le fichier.
        Si tu ne la mets pas, ça sort le résultat sur la sortie standard (à l'écran).

        Je suggère de travailler avec sed sans l'otpion -i pour préparer ton coup et puis quand tu es sur de toi ... tu finalise en ajoutant l'option -i
        0
    2. frans
       
      Simplement :
      echo -e "ligne à insérer\n$(cat data)" > data
      0
  11. sam3000 Messages postés 1226 Statut Membre 144
     
    salut
    tu doit faire ça en 4 étapes:

    ren monfichier.txt temp0001.tmp
    echo bonjour >monfichier.txt
    type temp0001.tmp >>monfichier.txt
    del temp0001.tmp
    


    si tu ne comprend pas l'astuce, demande je t'explique.
    -3
  12. chuchyyy
     
    En fait il nexiste pas de commande BASH pour insérer une ligne au debut. Par contre pour en ajouter a la fin oui.
    Ce quil a fait c qu'il a copié le fichier. Il en a crée un autre et a ajouté ta ligne. Pour ensuite mettre a la fin toutes les lignes de ton premier fichier.

    c clair non ? lol

    A+

    Guillaume
    -3