Eliminar la última línea de un archivo en Bash

Resuelto Fragsworth asked hace 13 años • 16 respuestas

Tengo un archivo foo.txtque contiene las siguientes líneas:

a
b
c

Quiero un comando simple que dé como resultado que el contenido foo.txtsea:

a
b
Fragsworth avatar Feb 03 '11 08:02 Fragsworth
Aceptado

Usando GNU sed:

sed -i '$ d' foo.txt

La -iopción no existe en GNU sedversiones anteriores a la 3.95, por lo que hay que usarla como filtro con un archivo temporal:

cp foo.txt foo.txt.tmp
sed '$ d' foo.txt.tmp > foo.txt
rm -f foo.txt.tmp

Por supuesto, en ese caso también podrías utilizar head -n -1en lugar de sed.

Mac OS:

En Mac OS X (a partir de 10.7.4), el equivalente del sed -icomando anterior es

sed -i '' -e '$ d' foo.txt
thkala avatar Feb 03 '2011 01:02 thkala

Esta es, con diferencia, la solución más rápida y sencilla, especialmente en archivos grandes:

head -n -1 foo.txt > temp.txt ; mv temp.txt foo.txt

Si desea eliminar la línea superior, utilice esto:

tail -n +2 foo.txt

lo que significa líneas de salida que comienzan en la línea 2.

No lo use sedpara eliminar líneas desde la parte superior o inferior de un archivo; es muy, muy lento si el archivo es grande.

John avatar Sep 10 '2012 09:09 John