So far we learned how to run commands in the command line and received a stream of output in the terminal. In this post, we’ll focus on input and output (I/O) redirection.
Through redirection you can direct the input and output of a command to and from other files and programs, and chain commands together in a pipeline.
cat brad_pitt.txt > dwayne_johnson.txt
> takes the standard output of the command on the left, and redirects it to the file on the right. Here the standard output of
cat brad_pitt.txt is redirected to dwayne_johnson.txt.
> overwrites all original content in dwayne_johnson.txt. When you view the output data by using
cat on dwayne_johnson.txt, you will see only the contents of brad_pitt.txt.
Now we know how to overwrite a file’s contents, but what if we want to be able to add to a file without losing the original text? We can use the
cat brad_pitt.txt >> dwayne_johnson.txt
>> takes the standard output of the command on the left and appends (adds) it to the file on the right.
Here, the output data of dwayne_johnson.txt will contain the original contents of dwayne_johnson.txt with the content of brad_pitt.txt appended to it.
cat < tom_hanks.txt
< takes the standard input from the file on the right and inputs it into the program on the left. Here, tom_hanks.txt is the standard input for the
cat command. The standard output appears in the terminal.
| is a “pipe.” The
| takes the standard output of the command on the left, and pipes it as standard input to the command on the right. You can think of this as “command to command” redirection.
cat tom_hanks.txt | wc
Above, the output of
cat tom_hanks.txt becomes the standard input of
wc. In turn, the
wc, “word count”, command outputs the number of lines, words, and characters in tom_hanks.txt, respectively.
cat tom_hanks.txt | wc | cat > julia_roberts.txt
|s can be chained together. Here the standard output of
cat tom_hanks.txt is “piped” to the
wc command. The standard output of
wc is then “piped” to
cat. Finally, the standard output of
cat is redirected to
We can view the output data of this chain by typing
sort takes the standard input and orders it alphabetically for the standard output (it doesn’t change the file itself). Here, the continents in actors.txt will be listed in alphabetical order:
cat actors.txt | sort > sorted_actors.txt
Here, the command takes the standard output from
cat actors.txt and “pipes” it to
sort. The standard output of
sort is redirected to a new file named sorted_actors.txt.