Vous pouvez simplement :
(head; tail) < file.txt
Et si vous avez besoin d'utiliser des tuyaux pour une raison quelconque, alors comme ceci :
cat file.txt | (head; tail)
Remarque :imprimera les lignes dupliquées si le nombre de lignes dans le fichier.txt est inférieur aux lignes par défaut de l'en-tête + aux lignes par défaut de la queue.
Pour un flux pur (par exemple, la sortie d'une commande), vous pouvez utiliser 'tee' pour bifurquer le flux et envoyer un flux à la tête et un à la queue. Cela nécessite d'utiliser soit la fonctionnalité '>( list )' de bash (+ /dev/fd/N):
( COMMAND | tee /dev/fd/3 | head ) 3> >( tail )
ou en utilisant /dev/fd/N (ou /dev/stderr) plus des sous-shells avec une redirection compliquée :
( ( seq 1 100 | tee /dev/fd/2 | head 1>&3 ) 2>&1 | tail ) 3>&1
( ( seq 1 100 | tee /dev/stderr | head 1>&3 ) 2>&1 | tail ) 3>&1
(Aucun de ces éléments ne fonctionnera dans csh ou tcsh.)
Pour quelque chose avec un peu plus de contrôle, vous pouvez utiliser cette commande perl :
COMMAND | perl -e 'my $size = 10; my @buf = (); while (<>) { print if $. <= $size; push(@buf, $_); if ( @buf > $size ) { shift(@buf); } } print "------\n"; print @buf;'
ed
est le standard text editor
$ echo -e '1+10,$-10d\n%p' | ed -s file.txt