Versuchen Sie Schwanz :
tail -n +2 "$FILE"
-n x
: Drucken Sie einfach die letzte x
Zeilen. tail -n 5
würden Sie die letzten 5 Zeilen der Eingabe erhalten. Die +
Zeichen kehrt das Argument gewissermaßen um und macht tail
alles außer dem ersten drucken x-1
Zeilen. tail -n +1
würde die gesamte Datei drucken, tail -n +2
alles außer der ersten Zeile, usw.
GNU tail
ist viel schneller als sed
. tail
ist auch unter BSD verfügbar und die -n +2
Flagge ist in beiden Werkzeugen gleich. Prüfen Sie die FreeBSD o OS X Man Pages für mehr.
Die BSD-Version kann viel langsamer sein als sed
Allerdings. Ich frage mich, wie sie das geschafft haben; tail
sollte eine Datei einfach Zeile für Zeile lesen, während sed
führt ziemlich komplexe Operationen durch, die das Interpretieren eines Skripts, die Anwendung regulärer Ausdrücke und ähnliches beinhalten.
Hinweis: Sie könnten versucht sein, die
# THIS WILL GIVE YOU AN EMPTY FILE!
tail -n +2 "$FILE" > "$FILE"
aber damit erhalten Sie eine leere Datei . Der Grund dafür ist, dass die Umleitung ( >
) geschieht vor tail
wird von der Shell aufgerufen:
- Shell schneidet Datei ab
$FILE
- Shell erstellt einen neuen Prozess für
tail
- Shell leitet stdout des Programms
tail
Prozess zu $FILE
tail
liest aus dem nun leeren $FILE
Wenn Sie die erste Zeile in der Datei entfernen möchten, sollten Sie die Option:
tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"
El &&
stellt sicher, dass die Datei nicht überschrieben wird, wenn ein Problem auftritt.