¿Cómo puedo descartar las últimas n líneas de un archivo con un filtro de línea de comando de Unix?
Eso sería lo contrario de tail: taildescarta las primeras n líneas pero canaliza el resto, pero quiero que el comando canalice todo excepto las últimas n líneas.
Lamentablemente no he encontrado nada de eso, headtampoco ayuda. EDITAR : al menos en Solaris no toma argumentos negativos.
Actualización: estoy interesado principalmente en una solución que funcione para archivos grandes, es decir, archivos de registro, donde es posible que desee inspeccionar lo que sucedió en los últimos minutos.

Respuestas:
Si tienes GNU
head, puedes usarpara imprimir todas menos las últimas 5 líneas de
file.txt.Si
head -nno toma argumentos negativos, intentefuente
file.txtpor lo menos con seis líneas de largo ...)head, se devuelve una salida vacía, sin errores.fuente
Aquí hay una manera simple de eliminar la última línea, que funciona en BSD, etc.
La expresión dice "en la última línea, elimínelo". Las otras líneas se imprimirán, ya que ese es
sedel comportamiento predeterminado.Podrías encadenarlos para eliminar varias líneas
Lo cual es un poco pesado, es cierto, pero solo escanea el archivo.
También puede consultar esto para obtener más respuestas: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file
Aquí hay una línea adaptada de uno de mis favoritos allí:
Me divertí descifrando ese, y espero que tú también lo hagas (: hace
Nlíneas de búfer mientras escanea, pero por lo demás es bastante eficiente.fuente
Tengo curiosidad por qué crees
headque no es una opción:Esto parece ajustarse a su propósito, usando, por ejemplo:
fuente
head. BSDheadno tiene esta opción, por lo que esta respuesta no funcionará en Solaris u otros Unixes sin GNU coreutils. El OP etiquetó específicamente esto con Unix y Unix-Utils también.Otra forma de hacerlo si
tail -nno toma argumentos negativos esEsto eliminaría las últimas 5 líneas.
fuente