Wie hänge ich die Ausgabe eines Befehls an das Ende einer Textdatei an?
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
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.
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
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.
Verwenden Sie den Operator >>
, um Text an eine Datei anzuhängen.
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
Ich würde vorschlagen, dass Sie zwei Dinge tun:
>>
in Ihrem Shell-Skript, um Inhalte an eine bestimmte Datei anzuhängen. Der Dateiname kann fest sein oder ein bestimmtes Muster verwenden.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
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
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