Hiermit können Sie die ersten beiden Zeilen entfernen:
tail -n +3 foo.txt
und dies, um die letzten beiden Zeilen zu entfernen:
head -n -2 foo.txt
(vorausgesetzt die Datei endet mit \n
für letztere)
Genau wie bei der Standardnutzung von tail
und sind head
diese Vorgänge nicht destruktiv. Verwenden >out.txt
Sie diese Option, wenn Sie die Ausgabe in eine neue Datei umleiten möchten:
tail -n +3 foo.txt >out.txt
Falls out.txt
bereits vorhanden, wird diese Datei überschrieben. Verwenden Sie >>out.txt
anstelle von, >out.txt
wenn die Ausgabe lieber angehängt werden soll out.txt
.
\n
“ .. Es funktioniert für alle negativen ganzen Zahlen außer-n -0
denen gibt gar nichts , so wie-n 0
würde (mit: Kopf (GNU coreutils) 7.4) ... Wenn jedoch ein nachlauf\n
vorhanden ist,-n -0
macht Druck wie von der zu erwarten ist-
, dh. er druckt die gesamte Datei ... So ist es für alle Nicht-Null negative Werte funktioniert .. aber-0
schlägt fehl , wenn es keine Hinter ist\n
head -n -2
ist nicht POSIX-kompatibel .Wenn Sie alle außer den ersten N-1-Leitungen möchten, rufen Sie
tail
mit der Anzahl der Leitungen an+N
. (Die Nummer ist die Nummer der ersten Zeile, die Sie beibehalten möchten, beginnend mit 1, dh +1 bedeutet, dass oben begonnen wird, +2 bedeutet, dass eine Zeile übersprungen wird usw.).Es gibt keine einfache, tragbare Möglichkeit, die letzten N Zeilen zu überspringen. GNU
head
erlaubthead -n +N
als Gegenstück vontail -n +N
. Andernfalls, wenn Sietac
(zB GNU oder Busybox) haben, können Sie es mit Tail kombinieren:Portabel können Sie einen awk-Filter verwenden (ungetestet):
Wenn Sie die letzten Zeilen aus einer großen Datei entfernen möchten, können Sie den Byte-Versatz des zu schneidenden Teils bestimmen und anschließend die Kürzung mit ausführen
dd
.Sie können eine Datei am Anfang nicht abschneiden. Wenn Sie jedoch die ersten Zeilen einer großen Datei entfernen müssen, können Sie den Inhalt verschieben .
quelle
Aus der
tail
Manpage (also GNUtail
):Daher sollten im Folgenden alle bis auf die ersten zwei Zeilen von
somefile.txt
an angehängt werdenanotherfile.txt
:quelle
Zum Entfernen der ersten n Zeilen kann GNU sed verwendet werden. Zum Beispiel, wenn n = 2 ist
Der
!
Mittelwert "dieses Intervall ausschließen". Wie Sie sich vorstellen können, kann zum Beispiel ein komplizierteres Ergebnis erzielt werdendas wird Linie 3,4,5,7 zeigen. Die Verwendung regulärer Ausdrücke anstelle von Adressen erhöht die Leistung.
Die Einschränkung besteht darin, dass die Zeilennummern im Voraus bekannt sein müssen.
quelle
sed 1,2d
? Einfacher ist normalerweise besser. Auch ist nichts in Ihren Beispielen spezifisch für GNU Sed; Ihre Befehle verwenden alle die POSIX- Standardfunktionen von Sed .Sie können
diff
die Ausgabe vonhead
/tail
mit der Originaldatei vergleichen und dann das Gleiche entfernen, um die Umkehrung zu erhalten.quelle
Während
tail -n +4
die Ausgabe der Datei ab der 4. Zeile (alle bis auf die ersten 3 Zeilen) Standard und portabel ist, ist dies nicht dashead
Gegenstück (head -n -3
alle bis auf die letzten 3 Zeilen).Portabel, würden Sie tun:
Oder:
(Beachten Sie, dass auf einigen Systemen, auf denen
sed
ein Musterbereich von begrenzter Größe vorhanden ist, dieser nicht auf große Werte von skaliertn
).Oder:
quelle
Wenn
<infile
es sich um eine reguläre,lseek()
-fähige Datei handelt, fühlen Sie sich auf jeden Fall frei. Das obige ist ein vollständig POSIX-unterstütztes Konstrukt.quelle
Mein Ansatz ist ähnlich wie bei Gilles, aber ich kehre die Datei mit cat und pipe einfach mit dem Befehl head um.
tac -r thefile.txt | head thisfile.txt (ersetzt Dateien)
quelle
Hoffe, ich habe Ihr Bedürfnis klar verstanden.
Sie haben verschiedene Möglichkeiten, Ihre Anfrage zu bearbeiten:
Wo / etc / passwd ist Ihre Datei
Die 2. Lösung kann nützlich sein, wenn Sie eine große Datei haben:
quelle
Lösung für BSD (macOS):
Entfernen Sie die ersten 2 Zeilen:
Letzte 2 Zeilen entfernen:
... nicht sehr elegant, aber erledigt den Job!
quelle