Eliminar la última línea de un archivo en Bash
Tengo un archivo foo.txt
que contiene las siguientes líneas:
a
b
c
Quiero un comando simple que dé como resultado que el contenido foo.txt
sea:
a
b
Usando GNU sed
:
sed -i '$ d' foo.txt
La -i
opción no existe en GNU sed
versiones 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 -1
en lugar de sed
.
Mac OS:
En Mac OS X (a partir de 10.7.4), el equivalente del sed -i
comando anterior es
sed -i '' -e '$ d' foo.txt
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 sed
para eliminar líneas desde la parte superior o inferior de un archivo; es muy, muy lento si el archivo es grande.