767 Stimmen

Wie kann ich die erste Zeile einer Textdatei mit einem bash/sed-Skript entfernen?

Ich muss wiederholt die erste Zeile aus einer großen Textdatei mit Hilfe eines Bash-Skripts entfernen.

Zurzeit verwende ich sed -i -e "1d" $FILE - aber es dauert etwa eine Minute, bis die Löschung erfolgt.

Gibt es eine effizientere Möglichkeit, dies zu erreichen?

0voto

Murilo Perrone Punkte 341

Auf der Grundlage von 3 anderen Antworten habe ich diese Syntax gefunden, die in meiner Mac OSx Bash-Shell perfekt funktioniert:

line=$(head -n1 list.txt && echo "$(tail -n +2 list.txt)" > list.txt)

Testfall:

~> printf "Line #%2d\n" {1..3} > list.txt
~> cat list.txt
Line # 1
Line # 2
Line # 3
~> line=$(head -n1 list.txt && echo "$(tail -n +2 list.txt)" > list.txt)
~> echo $line
Line # 1
~> cat list.txt
Line # 2
Line # 3

-1voto

EvilTeach Punkte 27313

Würde die Verwendung von Tail auf N-1 Zeilen und die Weiterleitung in eine Datei, gefolgt von der Entfernung der alten Datei und der Umbenennung der neuen Datei in den alten Namen die Aufgabe erfüllen?

Wenn ich das programmatisch machen würde, würde ich die Datei durchlesen und mir nach dem Lesen jeder Zeile den Dateiversatz merken, so dass ich zu dieser Position zurückgehen könnte, um die Datei mit einer Zeile weniger zu lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X