Sie können einfach:
(head; tail) < file.txt
Und wenn Sie aus irgendeinem Grund Pipes verwenden müssen, dann so:
cat file.txt | (head; tail)
Hinweis:druckt doppelte Zeilen, wenn die Anzahl der Zeilen in file.txt kleiner ist als die Standardzeilen für den Kopf + die Standardzeilen für das Ende.
Für einen reinen Stream (z. B. die Ausgabe eines Befehls) können Sie „tee“ verwenden, um den Stream zu verzweigen und einen Stream an Head und einen an Tail zu senden. Dies erfordert entweder die Verwendung der '>( list )'-Funktion von bash (+ /dev/fd/N):
( COMMAND | tee /dev/fd/3 | head ) 3> >( tail )
oder mit /dev/fd/N (oder /dev/stderr) plus Subshells mit komplizierter Umleitung:
( ( 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
(Keines davon funktioniert in csh oder tcsh.)
Für etwas mit etwas besserer Kontrolle können Sie diesen Perl-Befehl verwenden:
COMMAND | perl -e 'my $size = 10; my @buf = (); while (<>) { print if $. <= $size; push(@buf, $_); if ( @buf > $size ) { shift(@buf); } } print "------\n"; print @buf;'
ed
ist die standard text editor
$ echo -e '1+10,$-10d\n%p' | ed -s file.txt