cabeza; cabeza
{ head -n[num] >/dev/null
head -n[num]
} <infile >outfile
Con lo anterior, puede especificar el primer número de líneas para eliminar del encabezado de la salida con el primer headcomando, y el número de líneas para escribir outfilecon el segundo. Por lo general, también lo hará más rápido que sed, especialmente cuando la entrada es grande , a pesar de requerir dos invocaciones. Donde sedsin duda debe ser preferido, sin embargo, es en el caso de que <infilees no un habitual, lseekable archivo - porque esto normalmente no funciona como es debido, en ese caso, pero sedpuede manejar todas las modificaciones de salida en un solo proceso, con guión.
Con un GNU headtambién puede usar la -forma negativa [num]en el segundo comando. En cuyo caso, el siguiente comando eliminará la primera y última línea de la entrada:
{ head -n1 >/dev/null
head -n-1
} <infile >outfile
O con un POSIX sed:
Digamos, por ejemplo, que estaba leyendo una entrada de 20 líneas y quería eliminar las primeras 3 y las últimas 7. Si resolviera hacerlo con / sed, lo haría con un buffer de cola. Primero sumaría tres y siete para un recuento total de diez y luego hago:
seq 20 | sed -ne:n -e '3d;N;1,10bn' -eP\;D
Ese es un ejemplo que elimina las primeras 3 y las últimas 7 líneas de la entrada. La idea es que puede almacenar tantas líneas como desee de la cola de entrada en el espacio del patrón en una pila, pero solo Pborre la primera de estas para cada línea extraída.
- En las líneas
1,10 sed Pno hay nada porque para cada una de ellas está apilando la entrada en el espacio del patrón línea por línea en un bbucle de rancho.
- En la tercera línea,
sedse delige toda la pila , por lo que las primeras 3 líneas se eliminan de la salida de una sola vez.
- Cuando
sedllega a la $última línea de entrada e intenta extraer la Nextensión, golpea EOF y detiene el procesamiento por completo. Pero en ese momento el espacio del patrón contiene todas las líneas 14,20, ninguna de las cuales ha sido Pborrada y nunca lo ha sido.
- En cualquier otra línea, se
sed Palinea solo hasta la primera línea de flujo que ocurre \nen el espacio del patrón, y Delige lo mismo antes de comenzar un nuevo ciclo con lo que queda, o las siguientes 6 líneas de entrada. La séptima línea se agrega nuevamente a la pila con el Ncomando ext en el nuevo ciclo.
Y así, de seqla salida de (que es 20 líneas numeradas secuencialmente) , sedsolo imprime:
4
5
6
7
8
9
10
11
12
13
Esto se vuelve problemático cuando el número de líneas que desea eliminar de la cola de entrada es grande, porque sedel rendimiento es directamente proporcional al tamaño de su espacio de patrón. Aún así, sin embargo, es una solución viable en muchos casos, y POSIX especifica un sedespacio de patrón para manejar al menos 4 kb antes de reventar.