it-swarm.com.de

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

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

388
vincy

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

your_command >> file_to_append_to

Wenn file_to_append_to nicht existiert, wird es erstellt.

Beispiel:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
560
aioobe

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

Um dies zu testen, versuchen Sie es mit:

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 feststellen, dass Ihr Text mehrmals an die Datei textfile.txt angehängt wurde.

69
walta

Zum append einer Datei >> verwenden

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

dann sollte der ausgang sein

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

Zum overwrite einer Datei > verwenden

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

dann ist der ausgang

hello tom

64
yoctotutor.com

Verwenden Sie command >> file_to_append_to, um an eine Datei anzuhängen.

Zum Beispiel echo "Hello" >> testFile.txt

ACHTUNG: Wenn Sie nur einen einzigen > verwenden, wird der Inhalt der Datei vollständig überschrieben. Um sicherzustellen, dass dies nie passiert, können Sie set -o noclobber zu Ihrem .bashrc hinzufügen.

Auf diese Weise wird sichergestellt, dass Sie benachrichtigt werden, wenn Sie versehentlich command > file_to_append_to in eine vorhandene Datei eingeben. Beispielfehlermeldung: file exists: testFile.txt

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

28
craft

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

20
Nev Stokes

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) in o.txt eingefügt und danach die Datei basierend auf dem aktuellen Datum umbenannt.

Führen Sie die obigen Schritte stündlich mit dem Cron aus, oder

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

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 fest sein oder ein bestimmtes Muster verwenden.
  2. Richten Sie einen stündlichen Cronjob ein, um das Shell-Skript auszulösen
7
sballmer

Zum Beispiel enthält Ihre Datei:

 1.  [email protected]:~$ cat output.txt
    1
    2
    EOF

wenn du am Ende der Datei anhängen willst, dann ----> erinnere dich an Leerzeichen zwischen 'text' >> 'filename'

  2. [email protected]:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

Und um den Inhalt der Datei zu überschreiben:

  3.  [email protected]:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
7
Mangesh Bhapkar

Ich würde printf anstelle von echo verwenden, weil es zuverlässiger ist und Formatierungen wie die neue Zeile \n korrekt verarbeitet.

In diesem Beispiel wird eine Ausgabe ähnlich wie in den vorherigen Beispielen erstellt:

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
6
Braden Holt

Verwenden von tee mit der Option - a (--append) Mit können Sie an mehrere Dateien gleichzeitig anhängen und Sudo verwenden (sehr nützlich, wenn Sie an geschützte Dateien anhängen). . Außerdem ist es interessant, wenn Sie neben bash 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 über Tee

4
victortv