Une option plus simple à mon avis est :
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
Cela fonctionne parce que la commande à l'intérieur de $(...)
est exécuté avant todo.txt
est remplacé par > todo.txt
Bien que les autres réponses fonctionnent bien, je trouve celle-ci beaucoup plus facile à retenir car j'utilise écho et chat tous les jours.
EDITAR: Cette solution est une très mauvaise idée s'il y a des backslashes dans todo.txt
car grâce à la -e
L'écho du drapeau les interprétera. Une autre façon, bien plus simple, d'introduire des retours à la ligne dans la chaîne de préface est...
echo "task goes here
$(cat todo.txt)" > todo.txt
...simplement d'utiliser des sauts de ligne. Bien sûr, ce n'est plus une ligne unique, mais de façon réaliste, ce n'était pas non plus une ligne unique avant. Si vous faites ceci à l'intérieur d'un script, et que vous êtes préoccupé par l'indentation (par exemple, si vous exécutez ceci à l'intérieur d'une fonction), il y a quelques solutions de contournement pour que cela s'adapte bien, y compris mais sans s'y limiter :
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
De plus, si vous vous souciez de savoir si une nouvelle ligne est ajoutée à la fin de la commande todo.txt
ne les utilisez pas. Enfin, sauf l'avant-dernière. Ça ne gâche pas la fin.
2 votes
Il n'y a pas de moyen efficace de le faire pour les gros fichiers : unix.stackexchange.com/questions/87772/
0 votes
Pourriez-vous jeter un coup d'œil à cette méthode superuser.com/a/1352628/11116