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


478

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

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

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


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.


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.



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


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

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

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.