If you have GNU head
, you can use
head -n -5 file.txt
to print all but the last 5 lines of file.txt
.
If head -n
takes no negative arguments, try
head -n $(( $(wc -l file.txt | awk '') - 5 )) file.txt
Wie kann ich die letzten n Zeilen einer Datei mit einem Unix-Befehlszeilenfilter löschen?
Das wäre so etwas wie das Gegenteil von tail
: tail
verwirft die ersten n Zeilen, leitet den Rest durch, aber ich möchte, dass der Befehl alles durchlässt, mit Ausnahme der letzten n Zeilen.
Leider habe ich nichts dergleichen gefunden - head
hilft auch nicht. BEARBEITEN : Zumindest in Solaris gibt es keine negativen Argumente.
If you have GNU head
, you can use
head -n -5 file.txt
to print all but the last 5 lines of file.txt
.
If head -n
takes no negative arguments, try
head -n $(( $(wc -l file.txt | awk '') - 5 )) file.txt
Hier ist eine einfache Möglichkeit, die letzte Zeile zu löschen, die bei BSD usw. funktioniert.
sed '$d' input.txt
Der Ausdruck lautet "in der letzten Zeile löschen". Die anderen Zeilen werden gedruckt, da dies das sed
Standardverhalten ist.
Sie können sie miteinander verketten, um mehrere Zeilen zu entfernen
sed '$d' input.txt | sed '$d' | sed '$d'
Was zwar zugegebenermaßen etwas schwerfällig ist, aber nur einen einzigen Scan durch die Datei durchführt.
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 One-Liner, der von einem meiner Favoriten dort angepasst wurde:
N=10 sed -n -e ':a' -e "1,$N!;N;ba"
Ich hatte Spaß daran, diese zu entschlüsseln, und ich hoffe, dass Sie das auch tun (: Es puffert N
Zeilen beim Scannen, aber ansonsten ist es ziemlich effizient.
head file.txt # first 10 lines tail file.txt # last 10 lines head -n 20 file.txt # first 20 lines tail -n 20 file.txt # last 20 lines head -20 file.txt # first 20 lines tail -20 file.txt # last 20 lines head -n -5 file.txt # all lines except the 5 last tail -n +5 file.txt # all lines except the 4 first, starts at line 5
Ich bin neugierig, warum Sie denken, dass dies head
keine Option ist:
~$ man head ... -n, --lines=[-]K print the first K lines instead of the first 10; with the leading `-', print all but the last K lines of each file
Dies scheint zu Ihrem Zweck zu passen, zum Beispiel:
head -n -20 yourfile.txt