460 Stimmen

Entfernen der letzten Zeile aus einer Datei in Bash

Ich habe eine Datei, foo.txt die die folgenden Zeilen enthält:

a
b
c

Ich möchte einen einfachen Befehl, der den Inhalt von foo.txt sein:

a
b

3voto

Jav Punkte 31

OK Verarbeitung einer guten Menge von Daten und die Ausgabe war OK, aber hatte eine Junk-Zeile.

Wenn ich die Ausgabe des Skripts über eine Pipeline an:

| sed -i '$ d' würde ich die folgende Fehlermeldung erhalten und schließlich gar keine Ausgabe sed: keine Eingabedateien

Aber | head -n -1 hat funktioniert!

1voto

virtual-light Punkte 1

Beide Lösungen gibt es in anderer Form. Ich fand diese ein wenig praktischer, klarer und nützlicher:

Mit dd:

BADLINESCOUNT=1
ORIGINALFILE=/tmp/whatever
dd if=${ORIGINALFILE} of=${ORIGINALFILE}.tmp status=none bs=1 count=$(printf "$(stat --format=%s ${ORIGINALFILE}) - $(tail -n${BADLINESCOUNT} ${ORIGINALFILE} | wc -c)\n" | bc )
/bin/mv -f ${ORIGINALFILE}.tmp ${ORIGINALFILE}

Verwenden Sie truncate:

BADLINESCOUNT=1
ORIGINALFILE=/tmp/whatever
truncate -s $(printf "$(stat --format=%s ${ORIGINALFILE}) - $(tail -n${BADLINESCOUNT} ${ORIGINALFILE} | wc -c)\n" | bc ) ${ORIGINALFILE}

0voto

Minski Punkte 21
awk "NR != `wc -l < text.file`" text.file &> newtext.file

Dieser Ausschnitt erfüllt diesen Zweck.

-1voto

vineet Punkte 11

Sie können diese Methode auch ausprobieren: Beispiel für das Entfernen der letzten n Zeilen.

a=0 ; while [ $a -lt 4 ];do sed -i '$ d' output.txt; a= expr $a + 1 ;erledigt

Entfernen der letzten 4 Zeilen aus der Datei (output.txt).

-6voto

kurumi Punkte 24377

Ruby(1.9+)

ruby -ne 'BEGIN{prv=""};print prv ; prv=$_;' file

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