17.13. Pipes
Pipes allow a user to link together a sequence of commands
in a single command line. A pipe (|) redirects the stdout of the command
listed before the pipe (|) to the stdin of the command listed after
the pipe:
$ cmd1 | cmd2 # cmd1's stdout is cmd2's stdin
$ cat quote
The function of education is to teach one
to think intensively and to think critically.
Intelligence plus character - that is the
goal of true education.
$ cat quote | grep th # pipe stdout of cat into stdin of grep
# (find all lines containing "th")
to think intensively and to think critically.
Intelligence plus character - that is the
$ cat quote | wc # pipe stdout of cat into stdin of wc
4 26 160
$ ls
another
quote
$ ls | wc # pipe ls output to wc
2 2 14 # (number of lines, words, and chars in ls output)
Multiple pipes can be used in the same command line to chain together the stdout into the stdin of a sequence of commands:
cmd one | cmd two | ... | cmd n
Below is an example command line with two pipes. In this example,
the stdout of cat is piped into the stdin of grep th, and the
stdout of grep th is piped into the input of wc:
$ cat quote | grep th | wc # number of lines, words, chars in the 2 14 93 # lines of quote file that contain "th"
Here is the output from the first pipe in the command above, which
shows the output of grep th that is piped into the stdin
of wc in the second pipe:
$ cat quote | grep th to think intensively and to think critically. Intelligence plus character - that is the
Sometimes you may see the xargs command used in command lines with
pipes. The xargs <cmd> command executes cmd on every value passed to it
on stdin. We don’t cover xargs in detail, but instead illustrate
what it does compared to the ls | wc example shown above.
The example below illustrates the difference between wc and xargs wc
as the command after a pipe (ls | wc runs wc on the output of ls
whereas ls | xargs wc runs wc on every file listed by ls):
$ ls another quote $ ls | wc # lines, words, chars in ls output 2 2 14 $ ls | xargs wc # lines, words, chars in each file listed by ls 9 53 327 another 4 26 160 quote 13 79 487 total
17.13.1. References
For more information see:
-
Pipelines from the Bash Reference Manual from gnu.org.
-
most used Unix commands from cheat-sheets.org