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.
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.
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
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
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