关于管道输出的UNIX作业问题,我不明白它在问什么?

关于管道输出的UNIX作业问题,我不明白它在问什么?

基本上,我需要提出一个命令,将文件的内容发送xxx到程序中yyy,然后将输出通过管道传输到另一个程序的输入zzz,其中输出附加到文件中xyz

答案1

始终尝试将事情分解为最简单的步骤,然后尝试将事情组合在一起。为了开始第一部分,我将为自己构建一个示例文件。

$ echo -e "line 1 ABA\nline 2 ABB\nline 3 CCC\n" > xxx
$ cat xxx 
line 1 ABA
line 2 ABB
line 3 CCC

现在我们有了文件xxx。现在我们需要使用一些可以充当程序的东西yyy。 Unix 有很多可以替代的命令,所以我们grep现在就选择一下。 Grep 会找到我们告诉它要查找的字符串,所以让我们告诉它查找包含“AB”的字符串。

$ cat xxx | grep AB
line 1 ABA
line 2 ABB

所以我们刚刚满足了前两个要求。

  • cat xxx发送 file 的内容xxx
  • cat xxx | grep AB将内容发送到程序,yyy

因此,下一点“将输出通过管道传输到另一个程序的输入zzz”也应该相当简单,因为它与我们使用诸如 之类的命令所做的事情更加相似grep。那么让我们grep像这样使用另一个:

$ cat xxx | grep AB | grep BB
line 2 ABB

太好了,我们快到了。我们刚刚完成了第三个要求。

  • cat xxx | grep AB | grep BB将从的输出grep AB作为输入,并生成自己的输出。

所以最后一点,我们只需要附加 的输出zzz,即grep BB。这很容易。如果您注意到我们如何构造初始文件 ,xxx我们使用了文件重定向>,它将获取命令的输出并将其转储到文件中。重定向器>将用内容覆盖文件,即使它已经存在。但我们需要追加。幸运的是,我们可以使用另一个重定向器,>>.这会将命令的输出附加到已存在的文件中。

说到已经存在的文件,我们需要构建文件xyz。那么让我们使用我们echo以前制作的方法xxx

$ echo -e "previous line 1\nprevious line 2" > xyz
$ cat xyz 
previous line 1
previous line 2

现在让我们附加我们正在构建的命令的输出:

$ cat xxx | grep AB | grep BB >> xyz

我们可以检查我们的结果:

$ cat xyz 
previous line 1
previous line 2
line 2 ABB

我们就完成了。

相关内容