¿Hay alguna manera de head
/ tail
un documento y obtener la salida inversa; porque no sabes cuántas líneas hay en un documento?
Es decir, solo quiero obtener todo menos las 2 primeras líneas foo.txt
para agregar a otro documento.
text-processing
tail
head
chrisjlee
fuente
fuente
\n
" .. Funciona para todos los enteros negativos distintos de los-n -0
cuales no devuelve nada , tal como lo-n 0
haría (usando: head (GNU coreutils) 7.4) ... Sin embargo, cuando hay un final\n
,-n -0
se imprime como podría esperarse de la-
, es decir. imprime todo el archivo ... Por lo tanto, funciona para todos los valores negativos distintos de cero ... pero-0
falla cuando no hay seguimiento\n
head -n -2
no es compatible con POSIX .Si desea todas menos las primeras líneas N-1, llame
tail
con el número de líneas+N
. (El número es el número de la primera línea que desea conservar, comenzando en 1, es decir, +1 significa comenzar en la parte superior, +2 significa omitir una línea y así sucesivamente).No hay una forma fácil y portátil de omitir las últimas N líneas. GNU
head
permitehead -n +N
como contrapartida detail -n +N
. De lo contrario, si tienetac
(por ejemplo, GNU o Busybox), puede combinarlo con tail:Portablemente, puede usar un filtro awk (no probado):
Si desea eliminar las últimas líneas de un archivo grande, puede determinar el desplazamiento de bytes de la pieza a truncar y luego realizar el truncamiento con
dd
.No puede truncar un archivo en su lugar al principio, aunque si necesita eliminar las primeras líneas de un archivo enorme, puede mover el contenido .
fuente
Desde la
tail
página del manual (GNUtail
, es decir):Por lo tanto, lo siguiente debería agregar todas menos las 2 primeras líneas de
somefile.txt
aanotherfile.txt
:fuente
Para eliminar las primeras n líneas, se puede utilizar GNU sed. Por ejemplo si n = 2
La
!
media "excluye este intervalo". Como puede imaginar, se pueden obtener resultados más complicados, por ejemploeso mostrará la línea 3,4,5,7. Más poder proviene del uso de expresiones regulares en lugar de direcciones.
La limitación es que los números de las líneas deben conocerse de antemano.
fuente
sed 1,2d
? Más simple es generalmente mejor. Además, nada en sus ejemplos es específico de GNU Sed; todos sus comandos usan las características POSIX estándar de Sed .Puede usar
diff
para comparar la salida dehead
/tail
con el archivo original y luego eliminar lo que es lo mismo, por lo tanto, obtener el inverso.fuente
Mientras
tail -n +4
que el archivo de salida que comienza en la cuarta línea (todas menos las primeras 3 líneas) es estándar y portátil, suhead
contraparte (head -n -3
todas menos las últimas 3 líneas) no lo es.Portablemente, harías:
O:
(Tenga en cuenta que en algunos sistemas donde
sed
tiene un espacio de patrón de tamaño limitado, que no escala a valores grandes den
).O:
fuente
Si se
<infile
trata de unlseek()
archivo normal y habilitable, sí, por supuesto, siéntase libre. Lo anterior es una construcción totalmente compatible con POSIX.fuente
Mi enfoque es similar al de Gilles, pero en cambio solo invierto el archivo con cat y canalizo eso con el comando head.
tac -r thefile.txt | head thisfile.txt (reemplaza archivos)
fuente
Espero haber entendido claramente tu necesidad.
Tiene varias formas de completar su solicitud:
Donde / etc / passwd es su archivo
La segunda solución puede ser útil si tiene un archivo enorme:
fuente
Solución para BSD (macOS):
Eliminar las primeras 2 líneas:
Eliminar las últimas 2 líneas:
... no es muy elegante pero hace el trabajo!
fuente