comment puis-je echo $ quelque chose >> fichier.txt sans retour chariot?

81

Lorsque je echo $something >> file.txt, une nouvelle ligne sera ajouté au fichier.

Et si je veux ajouter sans nouvelle ligne?

onemach
la source
3
Soyez prudent echo $something, son comportement dépend de la IFSvariable et vous risquez de vous retrouver avec un caractère qui disparaît. Vous pouvez essayer ce qui suit: var="hello world"; echo $var(deux espaces entre hello et world) ou var="hello world"; IFS='l'; echo $varor var="-e hello \\n world"; echo $var. Pour résoudre ce problème, mettez des guillemets doubles autour de la variable comme ceci:, echo "$var"ou utilisez printf.
Jfg956

Réponses:

96

C'est pour ça echo -n.

Ignacio Vazquez-Abrams
la source
4
Y a-t-il un équivalent pour cat? (par exemple lorsque vous avez un fichier something.txtplutôt qu'une variable $something)
cboettig
1
@cboettig: Non. Utilisez un outil différent pour tout imprimer, sauf la nouvelle ligne.
Ignacio Vazquez-Abrams
@cboettig, cat n'ajoute rien à la sortie par défaut, un paramètre '-n' n'est donc pas nécessaire pour cat. Par exemple, si votre fichier ne comporte pas de fin de ligne dans la dernière ligne, votre invite de commande sera imprimée juste après le dernier caractère du fichier et non dans une nouvelle ligne
Rondo
41

printfest très flexible et plus portable que echo. A l'instar des implémentations C / Perl / etc, si vous ne terminez pas la chaîne de formatage avec \naucune nouvelle ligne n'est imprimée:

printf "%s" "$something" >> file.txt
Glenn Jackman
la source
7

Si vous utilisez le résultat de la commande, vous pouvez utiliser xargs en combinaison avec echo

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
zainengineer
la source
0

tr est une autre alternative.

Si vous utilisez echovotre entrée, vous pouvez vous échapper tr -d '\n'.

Cette technique fonctionne également lors de l’ajout de sorties à partir d’autres commandes (avec une seule ligne de sortie). De plus, si vous ne savez pas si les fichiers ont des fins de ligne UNIX ou DOS, vous pouvez les utiliser tr -d '\n\r'.

Voici quelques tests montrant que cela fonctionne.

Newline inclus:

something='0123456789' ; echo ${something} | wc -c
11

UNIX newline:

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 tret GNU tr.

Nic Doye
la source