基本上,我需要提出一个命令,将文件的内容发送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
我们就完成了。