UNIX text filters, part 2.2 of 3: head and tail
This post is part of a series
Continuing on our series of small text-filtering utilities, we have
head
and tail
. They are very simple, but also very useful.
head
The head
command is used to display the first few lines of a text file.
For example, the command:
$ head -n 4 [file]
Prints the first 4 lines of [file]
. If [file]
is not specified,
head
reads from standard input. If the option -n 4
is not specified,
the first 10 lines are shown.
One can also use the following alternative notation:
$ head -4 [file]
Of course, there is also the equivalent sed
command:
$ sed 5q [file]
tail
The tail
command shows the last few lines of a specified file,
or of standard input. It supports the same -n [number]
(or
-[number]
) option where n
defaults to 10.
However, for some reason, even in its standard POSIX variant, tail
has some extra features. First of all, one can add a +
before
[number]
to show all lines from the [number]
-th onwards,
instead of the last [number]
. For example:
$ printf '1\n2\n3\n4\n5\n' | tail -n +2
2
3
4
5
As you can see, the line numbering is 1-based.
It is also possible to start at a specific byte in the text stream
using the -c
option:
$ echo 'Hello' | tail -c 3
lo
Notice that the ending \n
is also included in the count. The -c
option
also supports the +[number]
notation:
$ echo 'Hello' | tail -c +2
ello
There is also an -r
option that reverses the order of the output:
$ printf '1\n2\n3\n4\n5\n' | tail -r -n 2
5
4
Perhaps the most interesting feature of tail
is the -f
option,
which makes it stay open when the end of the file is reached,
displaying in real time any lines that are sunbsequently added. It
can be used like this:
$ tail -f my-log-file.log
This can be useful when the command writing to my-log-file.log
is already running and it is not possible to redirect its output.
The -f
option does not work when tail
is reading from standard
input, so technically speaking we are not in “text filter” territory
anymore, but it was mentioning.
Conclusions
These two utilities don’t do much, but can accomplish a lot when combined with I/O redirection and other text filters.
Next in the series: rev