Varianten dieser Frage wurden sicherlich mehrmals an verschiedenen Stellen gestellt, aber ich versuche M
ohne Glück , die letzten Zeilen aus einer Datei zu entfernen .
Die zweithäufigste Antwort in dieser Frage empfiehlt die folgenden Schritte, um die letzte Zeile in einer Datei zu entfernen:
head -n -1 foo.txt > temp.txt
Wenn ich das in OSX & Zsh versuche, erhalte ich jedoch:
head: illegal line count -- -1
Warum das? Wie kann ich die M
letzten Zeilen und die ersten N
Zeilen einer bestimmten Datei entfernen ?
head --version
? Welches System verwenden Sie?head --version
gibt tatsächlich einen Fehler zurück.Antworten:
Sie können die ersten 12 Zeilen entfernen mit:
(Das bedeutet, dass ab der 13. Zeile gedruckt wird.)
Einige Implementierungen von
head
GNU-head
Unterstützung:aber das ist nicht standard.
würde auf jenen Systemen funktionieren, die
tail -r
(siehe auch GNUtac
) aber suboptimal sind.Wo
n
ist 1:Sie können auch:
2 Zeilen zu entfernen, ist aber nicht optimal.
Du kannst tun:
Beachten Sie jedoch, dass dies bei einigen Implementierungen nicht mit großen Werten von n funktioniert
sed
.Mit
awk
:So entfernen Sie
m
Zeilen vom Anfang undn
vom Ende:quelle
sed 'x;1d;$d'
könnte auch verwendet werden, um die letzten beiden Zeilen zu erhalten. Und w / ein paar vonN
's after1d
könnten verwendet werden, um ein wenig mehr als das zu erreichen, obwohl es zu diesem Zeitpunkt keinen Vorteil gegenüber derN;P;D
Schleife bietet, die Sie bereits empfehlen.m
odern
sind0
. Sonst wäre es perfekt.Mit der folgenden Methode können Sie die ersten N Zeilen und die letzten M Zeilen entfernen.
Mit
N=5
,M=7
und Dateitest.txt
:Der Befehl druckt alle Zeilen von N + 1 bis LastLine-M.
Eine andere Option ist die Verwendung von Python:
quelle
Sie können die letzten
M
(hier M = 100) Zeilen aus einer Datei entfernen mit:quelle