web-dev-qa-db-fra.com

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 œil à cette question , mais la réponse acceptée utilise un programme supplémentaire (sed) Je suis sûr qu'il devrait exister un moyen plus simple avec echo ou similaire.

97
Dchris
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 transférer 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.

115
Jon Kiparsky

Que diriez-vous:

echo "hello" >> <filename>

L'utilisation de l'opérateur >> ajoutera des données à la fin du fichier, tandis que l'utilisation du > é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 >, toutes les données du fichier seront détruites. Vous pouvez modifier ce comportement en définissant la variable noclobber dans votre .bashrc:

set -o noclobber

Maintenant, lorsque vous essayez de faire echo "hello" > file.txt, vous recevrez 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 fin de nouvelle ligne qui peut être supprimé à l'aide de l'indicateur -n:

echo -n "hello" >> <filename>

Références

155
Cyclonecode

Une autre manière possible est:

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

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

Si vous avez besoin de Sudo, utilisez:

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

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 ceci à la place:

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

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

Il utilise un ici document (ou heredoc) .

Toutefois, si vous avez besoin que Sudo soit ajouté au fichier indiqué, vous rencontrerez des difficultés pour utiliser un heredoc en raison de la redirection des E/S si vous tapez directement sur la ligne de commande.

Cette variante fonctionnera lorsque vous taperez 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 à la place pour éviter le problème Sudo en ligne de commande observé lors de l’utilisation de heredoc avec cat:

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