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
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
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!
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}
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.