Bash : insertion d'une ligne dans un fichier [Fermé]

Signaler
-
Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020
-
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


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
28
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

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
Messages postés
11
Date d'inscription
lundi 7 janvier 2013
Statut
Membre
Dernière intervention
4 décembre 2016

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
Messages postés
35625
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
24 septembre 2020
5 462 >
Messages postés
11
Date d'inscription
lundi 7 janvier 2013
Statut
Membre
Dernière intervention
4 décembre 2016

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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 768
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.
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
cp monfichier.txt temp0001.tmp
echo bonjour > monfichier.txt
cat temp0001.tmp >>monfichier.txt
rm temp0001.tmp

Voici la solution finale.

Ciao

Guillaume
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 :(
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 768
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]$
;-))
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
140
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???)
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 :)
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
140
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
@+
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 768
Peux-tu donner la commande exacte que tu tapes, s'il te plaît.
Affiche aussi la version de "sed" (sed -V).
Messages postés
9
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
8 novembre 2007
50
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!
N'existe-t-il pas une commande pour insérer une ligne en début de fichier sans passer par un fichier temporaire?
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.
> 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
Simplement :
echo -e "ligne à insérer\n$(cat data)" > data
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
140
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.
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