Wie kann ich die letzten n Zeilen einer Datei mit einem Unix-Befehlszeilenfilter verwerfen?
Das wäre ungefähr das Gegenteil von tail
: tail
wirft die ersten n Zeilen weg, leitet aber den Rest durch, aber ich möchte, dass der Befehl alles mit Ausnahme der letzten n Zeilen durchleitet.
Leider habe ich so etwas nicht gefunden - head
hilft auch nicht. EDIT : Zumindest in Solaris werden keine negativen Argumente akzeptiert.
Update: Ich bin hauptsächlich an einer Lösung interessiert, die für große Dateien funktioniert, dh für Protokolldateien, bei denen Sie möglicherweise überprüfen möchten, was in den letzten Minuten geschehen ist.
Antworten:
Wenn Sie GNU haben
head
, können Sie verwendenum alle bis auf die letzten 5 Zeilen von zu drucken
file.txt
.Wenn Sie
head -n
keine negativen Argumente annehmen, versuchen Sie esquelle
file.txt
das mindestens sechs Zeilen lang ist ...)head
, wird eine leere Ausgabe ohne Fehler zurückgegeben.quelle
Hier ist eine einfache Möglichkeit, die letzte Zeile zu löschen, die unter BSD usw. funktioniert.
Der Ausdruck lautet "in der letzten Zeile löschen". Die anderen Zeilen werden gedruckt, da dies das
sed
Standardverhalten ist.Sie können sie verketten, um mehrere Zeilen zu entfernen
Das ist zwar etwas unbeholfen, durchsucht die Datei aber nur einmal.
Sie können auch einen Blick darauf werfen, um weitere Antworten zu erhalten: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file
Hier ist ein Einzeiler, angepasst von einem meiner Favoriten:
Es hat mir Spaß gemacht, dieses zu entziffern, und ich hoffe, dass Sie es auch tun (: Es puffert
N
Zeilen beim Scannen, aber ansonsten ist es ziemlich effizient.quelle
Ich bin neugierig, warum Sie denken,
head
ist keine Option:Dies scheint zu Ihrem Zweck zu passen, zum Beispiel mit:
quelle
head
. BSDhead
diese Option nicht hat, so dass diese Antwort wird nicht ohne GNU coreutils auf Solaris oder anderen Unix - Varianten arbeiten. Das OP hat dies auch speziell mit Unix und Unix-Utils versehen.Eine andere Möglichkeit, dies zu tun, wenn
tail -n
keine negativen Argumente verwendet werden, istDies würde die letzten 5 Zeilen entfernen
quelle