Antworten:
Verwenden Sie >>
anstelle von, >
wenn Sie die Ausgabe in eine Datei leiten:
your_command >> file_to_append_to
Wenn file_to_append_to
nicht vorhanden, wird es erstellt.
Beispiel:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Um append
eine 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 overwrite
eine Datei zu verwenden >
echo "hello tom" > read.txt
cat read.txt
dann ist die Ausgabe
hello tom
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.
Verwenden Sie command >> file_to_append_to
diese 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 noclobber
Ihre hinzufügen .bashrc
.
Dadurch wird sichergestellt, dass Sie bei versehentlichem Eingeben command > file_to_append_to
in 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.
Verwenden Sie den >>
Operator, um Text an eine Datei anzuhängen.
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
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
Ich würde printf anstelle von echo verwenden, da es zuverlässiger ist und Formatierungen wie neue Zeilen \n
ordnungsgemäß 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
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
cat
ist ... einfach völlig verrückt. (Es ist leer, weil Sie gerade die Standardausgabe in eine Datei umgeleitet haben.)
echo
die Zeilenumbrüche aus der Zeichenfolge entfernt werden. Wie hängt man an eine Datei eine Zeichenfolge an, die Zeilenumbrüche enthält?