Comment ajouter une sortie à la fin d'un fichier texte

478

Comment ajouter la sortie d'une commande à la fin d'un fichier texte?

vincy
la source

Réponses:

665

Utilisez >>plutôt que >lors de la direction de la sortie vers un fichier

your_command >> file_to_append_to

S'il file_to_append_ton'existe pas, il sera créé.

Exemple:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
aioobe
la source
4
Le problème est que cela echosupprime les sauts de ligne de la chaîne. Comment ajouter à un fichier une chaîne contenant des sauts de ligne?
Timothy Swan
5
@ TimothySwan, je crois avec l'option -e.
Valentin Grégoire
echo ne supprime pas les sauts de ligne de la chaîne. Si vous n'arrivez pas à citer correctement l'argument, le shell divisera la chaîne et passera des arguments à echo et echo ne verra même jamais les retours à la ligne.
William Pursell
106

Pour appendutiliser un fichier >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

alors la sortie doit être

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

Pour overwriteutiliser un fichier >

echo "hello tom" > read.txt
cat read.txt  

alors le résultat est

hello tom

yoctotutor.com
la source
74

Vous pouvez utiliser l'opérateur >>. Cela ajoutera les données d'une commande à la fin d'un fichier texte.

Pour tester cela, essayez de lancer:

echo "Hi this is a test" >> textfile.txt

Faites cela plusieurs fois, puis exécutez:

cat textfile.txt

Vous verrez que votre texte a été ajouté plusieurs fois au fichier textfile.txt.

walta
la source
40

Utilisez command >> file_to_append_topour ajouter à un fichier.

Par exemple echo "Hello" >> testFile.txt

ATTENTION: si vous n'en utilisez qu'un seul, >vous écraserez le contenu du fichier. Pour vous assurer que cela ne se produira jamais, vous pouvez ajouter set -o noclobberà votre .bashrc.

Cela garantit que si vous tapez accidentellement command > file_to_append_todans un fichier existant, il vous avertira que le fichier existe déjà. Exemple de message d'erreur:file exists: testFile.txt

Ainsi, lorsque vous l'utiliserez, >il vous permettra uniquement de créer un nouveau fichier, pas d'écraser un fichier existant.

artisanat
la source
22

Utilisez l' >>opérateur pour ajouter du texte à un fichier.

Nev Stokes
la source
21

L'utilisation de tee avec l'option -a (--append) vous permet d'ajouter à plusieurs fichiers à la fois et également d'utiliser sudo (très utile lors de l'ajout à des fichiers protégés). En plus de cela, il est intéressant si vous devez utiliser d'autres shells en plus de bash, car tous les shells ne prennent pas en charge les opérateurs> et >>

echo "hello world" | sudo tee -a output.txt

Ce fil a de bonnes réponses sur le tee

victortv
la source
2
C'est le meilleur moyen d'ajouter quelque chose à une nouvelle ligne.
M_R_K
2
cherchait un moyen d'ajouter aux fichiers protégés et cela le résout
Woootiness
14

pour toute la question:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

cela ajoutera 720 lignes (30 * 24) dans o.txt et après renommera le fichier en fonction de la date actuelle.

Exécutez ce qui précède avec le cron toutes les heures, ou

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done
jm666
la source
11

J'utiliserais printf au lieu d'écho car il est plus fiable et traite \ncorrectement le formatage comme la nouvelle ligne .

Cet exemple produit une sortie similaire à écho dans les exemples précédents:

printf "hello world"  >> read.txt   
cat read.txt
hello world

Cependant, si vous deviez remplacer printf par echo dans cet exemple, echo traiterait \ n comme une chaîne, ignorant ainsi l'intention

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world
Braden Holt
la source
7

Je vous suggère de faire deux choses:

  1. Utilisez >>dans votre script shell pour ajouter du contenu à un fichier particulier. Le nom de fichier peut être fixe ou utiliser un modèle.
  2. Configurer un cronjob horaire pour déclencher le script shell
sballmer
la source
7

Par exemple, votre fichier contient:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

si vous voulez ajouter à la fin du fichier alors ----> rappelez-vous les espaces entre 'texte' >> 'nom de fichier'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

Et pour écraser le contenu du fichier:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
Mangesh Bhapkar
la source
1
C'est trompeur à bien des égards. Les espaces ne sont pas importants et diriger une sortie vide vers cat... est complètement farfelu. (Il est vide car vous venez de rediriger la sortie standard vers un fichier.)
tripleee