Rechercher : dans
Par :

Bash : insertion d'une ligne dans un fichier

Dernière réponse le 7 nov 2009 à 23:13:27 Johny jon, le 19 mai 2005 à 15:50:10 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « bash : insertion d'une ligne dans un fichier » dans :
Sed - Supprimer une ou plusieurs lignes d'un fichier Voir Supprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Sed - Insertion de texte VoirInsérer du texte dans un fichier Introduction Syntaxe Ajout de texte Insérer une ligne avec "i" Ajouter une ligne avec "a" Échanger une ligne avec "c" Introduction Il est parfois utile de pouvoir insérer du texte en en-tête d'un ou...
LaTeX - Insertion d'images VoirStyle LaTeX permet d'insérer des images de différents formats. Le plus simple est d'insérer des fichiers de type eps (Encapsuled Postscript) : Il suffit d'insérer dans le préambule la ligne suivante : \usepackage{graphicx} Puis d'insérer...

1

sam3000, le 19 mai 2005 à 16:01:15

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.
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

2

sam3000, le 19 mai 2005 à 16:04:52
  • +1

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???) L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

3

Johny jon, le 19 mai 2005 à 16:42:50

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 :)

Répondre à Johny jon

4

sam3000, le 19 mai 2005 à 16:45:28
  • +1

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
@+ L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

5

chuchyyy, le 19 mai 2005 à 16:46:19

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

Répondre à chuchyyy

6

chuchyyy, le 19 mai 2005 à 16:51:17

Cp monfichier.txt temp0001.tmp
echo bonjour > monfichier.txt
cat temp0001.tmp >>monfichier.txt
rm temp0001.tmp

Voici la solution finale.

Ciao

Guillaume

Répondre à chuchyyy

7

jipicy, le 19 mai 2005 à 17:22:50

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.
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

8

Johny jon, le 20 mai 2005 à 10:04:32

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

Répondre à Johny jon

9

jipicy, le 20 mai 2005 à 10:13:29

Peux-tu donner la commande exacte que tu tapes, s'il te plaît.
Affiche aussi la version de "sed" (sed -V). Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

10

tom, le 11 jan 2007 à 02:02:28

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 :(

Répondre à tom

11

jipicy, le 11 jan 2007 à 07:28:44

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]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

12

Botojo, le 8 nov 2007 à 04:13:22

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!

Répondre à Botojo

13

toto, le 23 jan 2009 à 00:50:07

N'existe-t-il pas une commande pour insérer une ligne en début de fichier sans passer par un fichier temporaire?

Répondre à toto

14

toto, le 23 jan 2009 à 00:56:30

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.

Répondre à toto

15

Gaston, le 30 sep 2009 à 12:03:51
  • +1

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

Répondre à Gaston

16

 frans, le 7 nov 2009 à 23:13:27

Simplement :
echo -e "ligne à insérer\n$(cat data)" > data

Répondre à frans
Collection CommentÇaMarche.net