So hängen Sie die Ausgabe an das Ende einer Textdatei an

478

Wie hänge ich die Ausgabe eines Befehls an das Ende einer Textdatei an?

vincy
quelle

Antworten:

665

Verwenden Sie >>anstelle von, >wenn Sie die Ausgabe in eine Datei leiten:

your_command >> file_to_append_to

Wenn file_to_append_tonicht vorhanden, wird es erstellt.

Beispiel:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
aioobe
quelle
4
Das Problem ist, dass echodie Zeilenumbrüche aus der Zeichenfolge entfernt werden. Wie hängt man an eine Datei eine Zeichenfolge an, die Zeilenumbrüche enthält?
Timothy Swan
5
@ TimothySwan, ich glaube mit der Option -e.
Valentin Grégoire
echo entfernt keine Zeilenumbrüche aus der Zeichenfolge. Wenn Sie das Argument nicht richtig zitieren, teilt die Shell die Zeichenfolge und übergibt Argumente an echo, und echo sieht nicht einmal die Zeilenumbrüche.
William Pursell
106

Um appendeine Datei zu verwenden >>

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

dann sollte die Ausgabe sein

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

Um overwriteeine Datei zu verwenden >

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

dann ist die Ausgabe

hello tom

yoctotutor.com
quelle
74

Sie können den Operator >> verwenden. Dadurch werden Daten aus einem Befehl an das Ende einer Textdatei angehängt.

Um dies zu testen, versuchen Sie Folgendes auszuführen:

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

Tun Sie dies ein paar Mal und führen Sie dann Folgendes aus:

cat textfile.txt

Sie werden sehen, dass Ihr Text mehrmals an die Datei textfile.txt angehängt wurde.

walta
quelle
40

Verwenden Sie command >> file_to_append_todiese Option, um eine Datei anzuhängen.

Zum Beispiel echo "Hello" >> testFile.txt

VORSICHT: Wenn Sie nur eine einzige verwenden >, überschreiben Sie den Inhalt der Datei. Um sicherzustellen, dass dies niemals passiert, können Sie set -o noclobberIhre hinzufügen .bashrc.

Dadurch wird sichergestellt, dass Sie bei versehentlichem Eingeben command > file_to_append_toin eine vorhandene Datei darauf hingewiesen werden, dass die Datei bereits vorhanden ist. Beispielfehlermeldung:file exists: testFile.txt

Wenn Sie es verwenden, können >Sie daher nur eine neue Datei erstellen und keine vorhandene Datei überschreiben.

Kunst
quelle
22

Verwenden Sie den >>Operator, um Text an eine Datei anzuhängen.

Nev Stokes
quelle
21

Wenn Sie tee mit der Option -a (--append) verwenden, können Sie mehrere Dateien gleichzeitig anhängen und auch sudo verwenden (sehr nützlich beim Anhängen an geschützte Dateien). Außerdem ist es interessant, wenn Sie neben bash noch andere Shells verwenden müssen, da nicht alle Shells die Operatoren> und >> unterstützen

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

Dieser Thread hat gute Antworten zum Thema Tee

victortv
quelle
2
Dies ist der beste Weg, um etwas mit einer neuen Zeile anzuhängen.
M_R_K
2
suchte nach einer Möglichkeit, an geschützte Dateien anzuhängen, und dies löst es
Woootiness
14

für die ganze Frage:

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

Dadurch werden 720 Zeilen (30 * 24) an o.txt angehängt und anschließend wird die Datei basierend auf dem aktuellen Datum umbenannt.

Führen Sie das oben genannte mit dem Cron jede Stunde aus, oder

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

Ich würde printf anstelle von echo verwenden, da es zuverlässiger ist und Formatierungen wie neue Zeilen \nordnungsgemäß verarbeitet.

Dieses Beispiel erzeugt eine Ausgabe ähnlich dem Echo in den vorherigen Beispielen:

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

Wenn Sie jedoch in diesem Beispiel printf durch echo ersetzen würden, würde echo \ n als Zeichenfolge behandeln und somit die Absicht ignorieren

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

Ich würde vorschlagen, dass Sie zwei Dinge tun:

  1. Verwenden Sie >>in Ihrem Shell-Skript, um Inhalte an eine bestimmte Datei anzuhängen. Der Dateiname kann festgelegt werden oder ein Muster verwenden.
  2. Richten Sie einen stündlichen Cronjob ein, um das Shell-Skript auszulösen
sballmer
quelle
7

Zum Beispiel enthält Ihre Datei:

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

Wenn Sie am Ende der Datei anhängen möchten, dann ----> merken Sie sich Leerzeichen zwischen 'Text' >> 'Dateiname'.

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

Und um den Inhalt der Datei zu überschreiben:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
Mangesh Bhapkar
quelle
1
Dies ist in vielen Details irreführend. Leerzeichen sind nicht wichtig und das Weiterleiten einer leeren Ausgabe catist ... einfach völlig verrückt. (Es ist leer, weil Sie gerade die Standardausgabe in eine Datei umgeleitet haben.)
Tripleee