comment faire l'écho de $something >> file.txt sans retour chariot ?
Lorsque je echo $something >> file.txt
, une nouvelle ligne sera ajoutée au fichier.
Et si je veux ajouter une ligne sans en ajouter une nouvelle ?
Lorsque je echo $something >> file.txt
, une nouvelle ligne sera ajoutée au fichier.
Et si je veux ajouter une ligne sans en ajouter une nouvelle ?
C'est à cela que sert echo -n
.
printf
est très flexible et plus portable que echo
. Comme les implémentations C/Perl/etc, si vous ne terminez pas la chaîne de format par \n
alors aucun saut de ligne n'est imprimé :
printf "%s" "$something" >> file.txt
```.
Si vous utilisez la sortie de la commande, vous pouvez utiliser les xargs en combinaison avec l'écho
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
est une autre alternative.
Si vous utilisez echo
comme entrée, vous pouvez vous débarrasser de la tr -d '\n'
.
Cette technique fonctionne également lorsque vous transférez la sortie d'autres commandes (avec une seule ligne de sortie). De plus, si vous ne savez pas si les fichiers ont des terminaisons de ligne UNIX ou DOS, vous pouvez utiliser tr -d '\n\r'
.
Voici quelques tests qui montrent que cela fonctionne.
Newline inclus :
something='0123456789' ; echo ${something} | wc -c
11
Nouvelle ligne UNIX :
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
style DOS :
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Testé avec BSD tr
et GNU tr
.