Utilizo sed para eliminar rápidamente líneas con una posición específica como
sed '1d'
sed '5d'
Pero, ¿qué pasa si quiero eliminar la última línea del archivo y no sé el recuento de líneas (sé que puedo obtener eso usando wcy varios otros trucos).
Actualmente, utilizando una solución alternativa heady tailcombinada con wcpara hacerlo. ¿Algún giro rápido aquí?
text-processing
sed
mtk
fuente
fuente

headytail...headytailconocer diferentes sabores?Respuestas:
in sed
$es la última línea, así que para eliminar la última línea:fuente
sed -i '$d' <file>para editar el archivo en su lugar.$ para la última línea:
fuente
sed '$d' file; sed '$d' filesed '$d' filerealidad no modifica el archivo; solo imprime el contenido del archivo, menos la última línea. Entoncessed '$d' file; sed '$d' fileimprimirá el contenido del archivo dos veces , menos la última línea cada vez. El equivalente de eliminar las últimas dos líneas desed '$d' fileessed '$d' file | sed '$d'.sed -n '1{h;n;}; $q; x; p;'. Estaba haciendo un puchero que no podemos hacersed '$-1,$d'.cat file.txt | head -n -1 > new_file.txtTenga cuidado, al parecer, dependiendo de la última línea de
file.txt(si termina conEOF, o\ny luegoEOF), el número de líneasnew_file.txtpuede ser el mismo (quefile.txt) después de este comando (esto sucede cuando no hay\n); en cualquier caso, Se elimina el contenido de la última línea.Además, tenga en cuenta que debe usar un segundo archivo (intermedio). Si captura y redirige al mismo archivo, lo borrará.
fuente
head -n -1 file.txt > new_file.txt. Sin embargo,head -ntenga en cuenta que las cuentas negativas solo están disponibles para algunas implementaciones dehead. Por ejemplo, no funciona para FreeBSD o para la versión de BusyBoxhead.head -n -1 file.txt > new_file.txtes mejor. Funciona de la misma manera con respecto a mis dos comentarios (mismo número de líneas y borrar en el mismo archivo). En cuanto al argumento negativo, tales diferencias ocurren de vez en cuando entre Unixes, y a menudo son frustrantes porque esperas que sea el mismo comando por completo (¡y por qué no lo harías - mismo nombre y propósito!) - de todos modos, bueno punto. (Uso Debian.)head --lines=-1. Primero me topé con esta posibilidad en la página de manual para head en un sistema SLES11SP2 (coreutils-8.12-6.23.1)tailyheadson parte decoreutils-rpm (al menos para sistemas basados en rpm).Según el registro de cambios de coreutils, esta sintaxis es compatible desde coreutils-versión 5.0.1
Malas noticias: según la página de manual de RH5, esta opción no se describe
Buenas noticias: funciona con RH5 (por lo que en su caso: funciona, al menos con una versión actual de RH5).
rpm -q coreutilsme muestra (en CentOS 5.8): coreutils-5.97-34.el5_8.1No estoy seguro si RH5.5. ya tiene la versión coreutils que lo admite. Pero 5.5 tiene EoLed de todos modos.
fuente
Linux
$ es la última línea, d para eliminar:
Mac OS
Equivalente de sed -i
fuente