it-swarm.com.de

Löschen Sie die letzte Zeile aus der Datei

Ich benutze sed, um Zeilen mit einer bestimmten Position als schnell zu löschen

sed '1d'
sed '5d'

Aber was ist, wenn ich die letzte Zeile der Datei löschen möchte und die Anzahl der Zeilen nicht kenne (ich weiß, dass ich das mit wc und mehreren anderen Tricks erreichen kann).

Derzeit wird eine Problemumgehung mit head und tail kombiniert mit wc verwendet, um dies zu tun. Irgendwelche schnellen Wendungen hier?

51
mtk

in sed $ ist die letzte Zeile, um die letzte Zeile zu löschen:

sed '$d' <file>
96
h3rrmiller

$ für die letzte Zeile:

sed '$d' file
32
Guru

cat file.txt | head -n -1 > new_file.txt

Passen Sie auf, wie es scheint, abhängig von der letzten Zeile von file.txt (Wenn es mit EOF oder \n Und dann EOF endet), der Anzahl der Zeilen in new_file.txt kann nach diesem Befehl identisch sein (wie file.txt) (dies geschieht, wenn kein \n vorhanden ist) - in jedem Fall wird der Inhalt der letzten Zeile gelöscht .

Beachten Sie außerdem, dass Sie eine zweite (Zwischen-) Datei verwenden müssen. Wenn Sie dieselbe Datei katzen und umleiten, löschen Sie sie.

15
Emanuel Berg

head --lines=-1. Ich bin zuerst auf diese Möglichkeit in der Manpage für head auf einem SLES11SP2-System gestoßen (coreutils-8.12-6.23.1).

tail und head sind Teil der coreutils- U/min (zumindest für U/min-basierte Systeme).

Laut dem Änderungsprotokoll von coreutils wird diese Syntax seit coreutils-Version 5.0.1 unterstützt

Schlechte Nachrichten: Laut RH5-Manpage wird diese Option nicht beschrieben

Gute Nachricht: Es funktioniert mit RH5 (also in Ihrem Fall: es funktioniert - zumindest mit einer aktuellen Version von RH5).

rpm -q coreutils zeigt mir (unter CentOS 5.8): coreutils-5.97-34.el5_8.1

Ich bin nicht sicher, ob RH5.5. hat bereits die coreutils-version, die es unterstützt. Aber 5.5 hat EoLed trotzdem.

6
Nils

Linux

$ ist die letzte Zeile, d zum Löschen:

sed '$d' ~/path/to/your/file/name

Mac OS

Äquivalent des sed -i

sed -i '' -e '$ d' ~/path/to/your/file/name
2
jasonleonhard