From a program’s point of view there is no difference
between reading text data from a file and reading it from your
keyboard. Similarly, writing text to a file and writing text to a
display are equivalent operations. As an extension of this idea, it is
also possible to tie the output of one program to the input of
another. This is accomplished using a pipe symbol
|) to join two or more commands
together, which we have seen some examples of already in this chapter.
grep "01523" order* | less
This command searches through all files whose names begin with
order to find lines containing the
01523. By creating this pipe,
the standard output of grep is sent to the
standard input of less. The mechanics of this
operation are handled by the shell and are invisible to the user.
Pipes can be used in a series of many commands. When more than two
commands are put together, the resulting operation is known as a
pipeline or text stream, implying the flow of
text from one command to the next.
As you get used to the idea, you’ll find yourself building pipelines naturally to extract specific information from text data sources. For example, suppose you wish to view a sorted list of inode numbers from among the files in your current directory. There are many ways you could achieve this. One way would be to use awk in a pipeline to extract the inode number from the output of ls, then send it on to the sort command and finally to a pager for viewing (don’t worry about the syntax ...