输入文件的多种方法

输入文件的多种方法

以下命令有什么区别:

$ input.txt > grep foo

$ grep foo < input.txt

$ cat input.txt | grep foo

$ grep foo input.txt

而且不仅仅是grep。其他命令也是如此。

答案1

  1. input.txt > grep foo 这可能是一个错误。它运行命令 input.txt并将输出重定向到名为grep.这foo是命令的一个参数input.txt

  2. grep foo < input.txtfoo这会在输入中 查找来自 的字符串input.txtgrep不会在命令行上获取文件名,因此它将在标准输入上工作。 shell 将通过重定向确保文件的内容input.txtgrep.

  3. cat input.txt | grep foo 这与前面的类似,但标准输入流grep现在连接到一个管道,cat命令通过该管道传递文件的内容input.txt。该cat命令写入其标准输出流,该输出流grep通过管道连接到标准输入流。

  4. grep foo input.txt 这使得grep打开文件input.txt并查找foo其中的字符串。它不使用标准输入流。

一般来说:

  • 管道 ( |) 将其左侧的标准输出流与其右侧的标准输入流连接起来。

  • 输入重定向 ( <) 从文件重定向到标准输入流。

  • 输出重定向 ( >) 将标准输出重定向到文件。

  • 输入和输出流可以同时重定向,例如使用commandname <inputfile >outputfile,并且命令可以读取和写入管道,如 中的第二个命令command1 | command2 | command3

  • 重定向和管道可以组合起来:cat <input.txt | grep foo >output.txt.

许多 Unix 实用程序将输入文件名作为可选参数,如果未给出文件名,则将使用标准输入。

一些 Unix 实用程序仅有的适用于标准输入,例如tr

Bash 和其他一些 shell,例如ksh,也支持使用<<<"string"(称为这里的字符串),大多数 shell 都能理解此处文档(查找这些)。

相关内容