tête; tête
{   head -n[num] >/dev/null
    head -n[num]
}  <infile >outfile
Avec ce qui précède, vous pouvez spécifier le premier nombre de lignes à retirer de la tête de la sortie avec la première headcommande, et le nombre de lignes à écrire outfileavec la seconde. Il le fera également généralement plus rapidement que sed- en particulier lorsque l'entrée est volumineuse - bien qu'il nécessite deux appels. Où sedcertainement devrait être préféré cependant, est dans le cas qui <infileest pas régulièrement, lseekable fichier - car cela généralement pas fonctionner comme prévu dans ce cas, mais sedpeut gérer toutes les modifications de sortie dans un seul processus scénarisé.
Avec un GNU, headvous pouvez également utiliser la -forme négative pour [num]dans la deuxième commande. Dans ce cas, la commande suivante supprimera la première et la dernière ligne de l'entrée:
{   head -n1 >/dev/null
    head -n-1
}  <infile >outfile
OU avec un POSIX sed:
Supposons, par exemple, que je lisais une entrée de 20 lignes et que je voulais supprimer les 3 premiers et les 7 derniers. Si je décidais de le faire avec sed, je le ferais avec un tampon de queue. Je voudrais d'abord additionner trois et sept pour un nombre total de bandes de dix, puis faire:
seq 20 | sed -ne:n -e '3d;N;1,10bn' -eP\;D
C'est un exemple qui supprime les 3 et 7 dernières lignes de l'entrée. L'idée est que vous pouvez mettre en mémoire tampon autant de lignes que vous souhaitez supprimer de la queue de l'entrée dans l'espace de motif sur une pile, mais seulement Préimprimer la première de celles-ci pour chaque ligne tirée.
- On lines 1,10sedPn'imprime rien car pour chacun d'entre eux, il empile les entrées ligne par ligne dans un espace de motif dans unebboucle ranch.
- Sur la 3ème ligne, la totalité de sedla pile estdterminée - et donc les 3 premières lignes sont supprimées de la sortie en un seul coup.
- Lorsqu'il sedatteint la$dernière ligne d'entrée et tente d'extraire l'Nextension, il frappe EOF et arrête complètement le traitement. Mais à ce moment-là, l'espace de motif contient toutes les lignes14,20- dont aucune n'a encore étéPimprimée, et ne le sont jamais.
- Sur toutes les autres lignes, sedPne s'imprime que jusqu'à la première ligne\nélectronique apparaissant dans l'espace de motif, et lesDsupprime avant de commencer un nouveau cycle avec ce qui reste - ou les 6 lignes d'entrée suivantes. La 7ème ligne est à nouveau ajoutée à la pile avec laNcommande ext dans le nouveau cycle.
Et donc, de seqla sortie de (qui est 20 lignes numérotées séquentiellement) , sedimprime uniquement:
4
5
6
7
8
9
10
11
12
13
Cela devient problématique lorsque le nombre de lignes que vous souhaitez supprimer de la queue d'entrée est important, car sedles performances de sont directement proportionnelles à la taille de son espace de motif. Pourtant, c'est une solution viable dans de nombreux cas - et POSIX spécifie un sedespace de modèle pour gérer au moins 4 Ko avant de se casser.