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
A voir également:

11 réponses

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
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
Lemez > PSSGd1
 

Merciiiii

0
eloodie
 
Merci !
0
hevoilajegalèrencor Messages postés 10 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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431 > hevoilajegalèrencor Messages postés 10 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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
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
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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   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
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
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Peux-tu donner la commande exacte que tu tapes, s'il te plaît.
Affiche aussi la version de "sed" (sed -V).
-2
Botojo Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   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
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
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
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
frans
 
Simplement :
echo -e "ligne à insérer\n$(cat data)" > data
0
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   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
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