it-swarm.com.de

Wie hänge ich Text an eine Datei an?

Was ist der einfachste Weg, um unter Linux Text an eine Datei anzuhängen?

Ich habe nachgesehen bei dieser Frage , aber die akzeptierte Antwort verwendet ein zusätzliches Programm (sed). Ich bin sicher, es sollte einen einfacheren Weg mit echo oder ähnlichem geben .

97
Dchris
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 
^D

Grundsätzlich können Sie beliebigen Text in die Datei kopieren. STRG-D sendet ein Dateiendesignal, das die Eingabe beendet und Sie zur Shell zurückbringt.

115
Jon Kiparsky

Wie wäre es mit:

echo "hello" >> <filename>

Bei Verwendung des Operators >> Werden Daten am Ende der Datei angehängt, während bei Verwendung des Operators > Der Inhalt der Datei überschrieben wird, sofern er bereits vorhanden ist.

Sie können printf auch auf die gleiche Weise verwenden:

printf "hello" >> <filename>

Beachten Sie, dass es gefährlich sein kann, die oben genannten zu verwenden. Wenn Sie zum Beispiel bereits eine Datei haben und Daten an das Ende der Datei anhängen müssen und vergessen, das letzte > Hinzuzufügen, werden alle Daten in der Datei zerstört. Sie können dieses Verhalten ändern, indem Sie die Variable noclobber in Ihrem .bashrc Festlegen:

set -o noclobber

Wenn Sie nun versuchen, echo "hello" > file.txt Auszuführen, erhalten Sie eine Warnung mit der Aufschrift cannot overwrite existing file.

Um das Schreiben in die Datei zu erzwingen, müssen Sie jetzt die spezielle Syntax verwenden:

echo "hello" >| <filename>

Sie sollten auch wissen, dass echo standardmäßig ein abschließendes Zeilenumbruchzeichen hinzufügt, das mit dem Flag -n Unterdrückt werden kann:

echo -n "hello" >> <filename>

Referenzen

155
Cyclonecode

Ein anderer möglicher Weg ist:

echo "text" | tee -a filename >/dev/null

Das -a wird am Ende der Datei angehängt.

Wenn Sie Sudo benötigen, verwenden Sie:

echo "text" | Sudo tee -a filename >/dev/null
21
user9869932

Follow-up zur akzeptierten Antwort.

Sie benötigen etwas anderes als STRG-D, um das Ende zu bestimmen, wenn Sie dies in einem Skript verwenden . Versuchen Sie dies stattdessen:

cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF

Dadurch wird Text an die angegebene Datei angehängt (ohne "EOF").

Es verwendet ein hier document (oder heredoc) .

Wenn Sie jedoch Sudo zum Anhängen an die angegebene Datei benötigen, treten aufgrund der E/A-Umleitung Probleme bei der Verwendung eines Heredocs auf, wenn Sie direkt in die Befehlszeile tippen.

Diese Variante funktioniert, wenn Sie direkt in die Befehlszeile eingeben:

Sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'

Oder Sie können stattdessen tee verwenden, um das Sudo-Kommandozeilenproblem zu vermeiden, das bei der Verwendung des Heredocs mit cat auftritt:

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
8
user12345