126 votes

Comment ajouter du texte à un fichier ?

Quel est le moyen le plus simple d'ajouter du texte à un fichier sous Linux ?

J'ai jeté un coup d'oeil à cette question mais la réponse acceptée utilise un programme supplémentaire ( sed ) Je suis sûr qu'il doit y avoir un moyen plus facile avec echo ou similaire.

202voto

Krister Andersson Points 9788

Pourquoi pas :

echo "hello" >> <filename>

Utilisation de la >> ajoutera des données à la fin du fichier, tandis que l'opérateur > écrasera le contenu du fichier s'il existe déjà.

Vous pouvez également utiliser printf de la même manière :

printf "hello" >> <filename>

Notez qu'il peut être dangereux d'utiliser ce qui précède. Par exemple, si vous avez déjà un fichier et que vous devez ajouter des données à la fin du fichier et que vous oubliez d'ajouter le dernier caractère > toutes les données du fichier seront détruites. Vous pouvez modifier ce comportement en définissant l'option noclobber dans votre .bashrc :

set -o noclobber

Maintenant, quand vous essayez de faire echo "hello" > file.txt vous obtiendrez un avertissement disant cannot overwrite existing file .

Pour forcer l'écriture dans le fichier, vous devez maintenant utiliser la syntaxe spéciale :

echo "hello" >| <filename>

Vous devez également savoir que par défaut echo ajoute un caractère de nouvelle ligne à la fin, qui peut être supprimé en utilisant la commande -n drapeau :

echo -n "hello" >> <filename>

Références

143voto

Jon Kiparsky Points 5185
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 
^D

Essentiellement, vous pouvez mettre n'importe quel texte dans le fichier. CTRL-D envoie un signal de fin de fichier, qui met fin à l'entrée et vous ramène au shell.

25voto

julianromera Points 401

L'autre moyen possible est :

echo "text" | tee -a filename >/dev/null

El -a sera ajouté à la fin du fichier.

Si vous avez besoin sudo utiliser :

echo "text" | sudo tee -a filename >/dev/null

18voto

user93341 Points 268

Suivi de la réponse acceptée.

Vous avez besoin de quelque chose d'autre que CTRL-D pour désigner la fin si vous utilisez ceci dans un script. . Essayez plutôt ceci :

cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF

Ceci ajoutera du texte au fichier indiqué (sans inclure "EOF").

Il utilise un document ici (ou heredoc) .

Cependant, si vous avez besoin de sudo pour ajouter au fichier indiqué, vous aurez des difficultés à utiliser un heredoc en raison de la redirection des E/S si vous tapez directement sur la ligne de commande.

Cette variante fonctionne lorsque vous tapez directement sur la ligne de commande :

sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'

Ou vous pouvez utiliser tee pour éviter le problème de sudo en ligne de commande rencontré lors de l'utilisation de heredoc avec cat :

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X