echo "abc" >>file.txt
met une nouvelle ligne après abc
, pas avant. Si vous vous retrouvez avec abc
sa propre ligne, cela signifie que la nouvelle ligne avant abc
était déjà présente dans file.txt
.
Notez qu'il est parfaitement normal qu'un fichier texte se termine par une nouvelle ligne. Sous Unix, une ligne se compose d'une séquence de caractères autres que null⁰ ou newline suivie d'une nouvelle ligne. 1 Par conséquent, tout fichier texte non vide se termine par un caractère de nouvelle ligne.
Si vous souhaitez ajouter du texte à la dernière ligne d'un fichier, vous ne pouvez pas le faire avec >>
, car cela s'ajoute toujours au fichier, donc il écrit toujours après la dernière nouvelle ligne. Au lieu de cela, vous avez besoin d'un outil capable de modifier un fichier existant. Par exemple, vous pouvez utiliser sed :
sed '$ s/$/abc/' file.txt >file.txt.new && mv file.txt.new file.txt
Dans la commande sed, le premier $
signifie « s/REGEX/REPLACEMENT/
exécuter la commande suivante uniquement sur la dernière ligne», la commande remplace REGEX par REPLACEMENT et l'expression régulière $
correspond à la fin de la ligne.
La commande sed de Linux a une fonction intégrée pour automatiser cette séquence de création de nouveau fichier et de remplacement, vous pouvez donc la raccourcir en
sed -i '$ s/$/abc/' file.txt
⁰ C'est un octet nul, que ASCII appelle NUL et Unicode appelle U + 0000. Les programmes de traitement de texte peuvent ou non gérer ce caractère.
1 Voir les définitions de fichier texte , ligne et caractère de nouvelle ligne dans la section "Définitions" du chapitre Définitions de base de IEEE 1003.1-2008: 2016.