echo "abc" >>file.txt
Setzt einen Zeilenumbruch nach abc
, nicht vorher. Wenn Sie am Ende abc
eine eigene Zeile haben, bedeutet dies, dass die vorherige Zeile abc
bereits in vorhanden war file.txt
.
Beachten Sie, dass es völlig normal ist, dass eine Textdatei in einer neuen Zeile endet. Unter Unix besteht eine Zeile aus einer Folge von anderen Zeichen als null⁰ oder newline, gefolgt von einer newline. 1 Daher endet jede nicht leere Textdatei mit einem Zeilenumbruch.
Wenn Sie der letzten Zeile einer Datei Text hinzufügen möchten, können Sie dies nicht tun >>
, da dieser immer an die Datei angehängt wird und daher immer nach der letzten neuen Zeile geschrieben wird. Stattdessen benötigen Sie ein Tool, mit dem Sie eine vorhandene Datei ändern können. Beispielsweise können Sie sed verwenden :
sed '$ s/$/abc/' file.txt >file.txt.new && mv file.txt.new file.txt
Im sed-Befehl $
bedeutet das erste " s/REGEX/REPLACEMENT/
Führe den folgenden Befehl nur in der letzten Zeile aus", der Befehl ersetzt REGEX durch REPLACEMENT und der reguläre Ausdruck $
stimmt am Ende der Zeile überein.
Der sed-Befehl von Linux verfügt über eine integrierte Funktion zum Automatisieren dieser Sequenz zum Erstellen neuer Dateien und zum Ersetzen. Sie können diese Sequenz also auf verkürzen
sed -i '$ s/$/abc/' file.txt
⁰ Das ist ein Null-Byte, das von ASCII als NUL und von Unicode als U + 0000 bezeichnet wird. Textverarbeitungsprogramme können mit diesem Zeichen zurechtkommen oder nicht.
1 Siehe die Definitionen von Textdatei , Linie und Newline - Zeichen im Abschnitt „Definitionen“ der Basis Definitionen Kapitel IEEE 1.003,1-2.008: 2016.