
Eine der häufigsten Aufgaben beim Schreiben von Bash-Skripten oder Arbeiten an der Linux-Befehlszeile ist das Lesen und Schreiben von Dateien.
Dieser Artikel erklärt, wie man Text in eine Datei in Bash schreibt, indem man die Umleitungsoperatoren und tee
verwendet Befehl.
Schreiben in eine Datei mit Umleitungsoperatoren #
In Bash ermöglicht Ihnen die Umleitung der Ausgabe, die Ausgabe eines Befehls zu erfassen und in eine Datei zu schreiben.
Das allgemeine Format zum Umleiten und Schreiben der Ausgabe in eine Datei lautet wie folgt:
output > filename
output >> filename
- Der
>
Der Umleitungsoperator schreibt die Ausgabe in eine angegebene Datei. Wenn die Datei vorhanden ist, wird sie auf die Länge null gekürzt. Andernfalls wird die Datei erstellt. Seien Sie besonders vorsichtig, wenn Sie diesen Operator verwenden, da Sie möglicherweise eine wichtige Datei überschreiben. - Der
>>
Der Umleitungsoperator hängt die Ausgabe an eine bestimmte Datei an. Die Datei wird erstellt, wenn sie nicht existiert.
Sie benötigen Schreibrechte für die Datei. Andernfalls erhalten Sie eine Fehlermeldung zur Verweigerung der Berechtigung.
Hier ist ein einfaches Beispiel, das zeigt, wie die Ausgabe von echo
umgeleitet wird Befehl in eine Datei:
echo "this is a line" > file.txt
Um das Überschreiben vorhandener Dateien zu verhindern, aktivieren Sie die Option „noclobber“ mit dem set
eingebaut:
set -o noclobber
echo "this is a line" > file.txt
bash: file.txt: cannot overwrite existing file
Der >|
Mit dem Operator können Sie die Bash-Option „noclobber“ überschreiben:
set -o noclobber
echo "this is a line" >| file.txt
Der >>
Operator die Ausgabe an das Ende der Datei anhängen, anstatt die Datei zu überschreiben:
echo "this is a line" >> file.txt
Verwenden Sie den printf
Befehl zum Erstellen einer komplexen Ausgabe:
printf "Hello, I'm %s.\n" $USER > file.txt
Wenn Sie mehrere Zeilen in eine Datei schreiben möchten, verwenden Sie die Here-Dokument(Heredoc)-Umleitung.
Beispielsweise können Sie den Inhalt an cat
übergeben Befehl und schreibe ihn in eine Datei:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Um die Zeilen anzuhängen, ändern Sie >
mit >>
vor dem Dateinamen:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Sie können die Ausgabe jedes Befehls in eine Datei schreiben:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
Die Ausgabe des date
Befehl wird in die Datei geschrieben.
Schreiben in eine Datei mit dem tee
Befehl #
Das tee
Der Befehl liest von der Standardeingabe und schreibt gleichzeitig sowohl in die Standardausgabe als auch in eine oder mehrere Dateien.
echo "this is a line" | tee file.txt
Das tee
Das Standardverhalten des Befehls besteht darin, die angegebene Datei zu überschreiben, genau wie >
Operator. Um die Ausgabe an die Datei anzuhängen, rufen Sie den Befehl mit -a
auf (--append
) Option:
echo "this is a line" | tee -a file.txt
Wenn Sie das tee
nicht möchten Um in die Standardausgabe zu schreiben, können Sie sie nach /dev/null
umleiten :
echo "this is a line" | tee file.txt >/dev/null
Um den Text in mehr als eine Datei zu schreiben, geben Sie die Dateien als Argumente für tee
an Befehl:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Ein weiterer Vorteil des tee
Befehl ist, dass Sie ihn in Verbindung mit sudo
verwenden können und in Dateien schreiben, die anderen Benutzern gehören. Um Text an eine Datei anzuhängen, für die Sie keine Schreibberechtigung haben, stellen Sie sudo
voran vor tee
:
echo "this is a line" | sudo tee file.txt
Das echo
Die Befehlsausgabe wird als Eingabe an tee
übergeben , das die sudo-Berechtigungen erhöht und den Text in die Datei schreibt.
Schlussfolgerung #
Um unter Linux Text in eine Datei zu schreiben, verwenden Sie >
und >>
Umleitungsoperatoren oder das tee
Befehl.