![如何将命令的输出传送到另一个命令同时将其显示在控制台上?](https://linux22.com/image/1573405/%E5%A6%82%E4%BD%95%E5%B0%86%E5%91%BD%E4%BB%A4%E7%9A%84%E8%BE%93%E5%87%BA%E4%BC%A0%E9%80%81%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E5%90%8C%E6%97%B6%E5%B0%86%E5%85%B6%E6%98%BE%E7%A4%BA%E5%9C%A8%E6%8E%A7%E5%88%B6%E5%8F%B0%E4%B8%8A%EF%BC%9F.png)
我想将流的部分结果写入文件,但我希望将流的全部内容打印到控制台。是否有命令可以帮助实现这一点?
最小示例:
假设我有一个文件,foo.txt
其内容为:
bat
dude
rude
我想将该文件中包含字母“a”的所有行写入bar.txt
。我可以写
cat foo.txt | grep 'a' > bar.txt
这将导致bar.txt
包含bat
。但这不会给我想要的控制台输出。
相反,我更喜欢这样:
cat foo.txt | output-stdin-to-console-and-pass-to-stdout | grep 'a' > bar.txt
它不仅会写入bat
,bar.txt
还会将以下内容写入控制台:
bat
dude
rude
有什么命令我可以运行来做到这一点?
答案1
答案2
你可以简单地使用这个:
cat foo.txt && cat foo.txt | grep 'a' > bar.txt
否则,可以使用tee
从https://www.geeksforgeeks.org/tee-command-linux-example/
tee 命令读取标准输入并将其写入标准输出和一个或多个文件。该命令以管道工程中使用的 T 型分离器命名。它基本上会拆分程序的输出,以便既可以显示又可以保存在文件中。它同时执行这两项任务,将结果复制到指定的文件或变量中,并显示结果。