帮助理解以下之间的差异:sort < file.txt VS file.txt | sort

帮助理解以下之间的差异:sort < file.txt VS file.txt | sort

所以我正在学习 Ubuntu(第一次),正在阅读 Ubuntu 服务器书籍

第 14 章说

filename.txt | sort 将给我一个包含文件内容的输出,但经过排序但是它没有提及我是否可以输入:

filename.txt | sort > sortedfilename.txt 这次创建一个内容已排序的新文件,可以吗?

它确实表明我可以输入

sort < filename.txt

再次,获取文件内容的排序输出,它继续提到我可以输入 sort < filename.txt > sortedfilename.txt

并创建一个内容排序的文件

那么,这两种不同的方法能做同一件事吗?

谢谢你!

答案1

您的示例代码中有一个拼写错误,我会首先解决它。filename | ...除了脱口而出一个错误然后混淆管道另一端的东西之外不会做任何事情......除非该文件名也是一个全局可执行文件,那么它就不会做你想要的事情。

你需要cat filename | ...

只是为了混淆视听,sort还可以将文件名作为参数。您可以(并且应该,如果这是您的实际用例)直接运行sort filename > sortedfilename


无论如何,回到重定向...

输入重定向 ( <) 从文件读取并将其导入stdin。要回答你的问题,它是直接地相当于cat filename |

sort命令查找stdin代替文件名参数的 ,并进行排序,然后将其通过管道传输到stdout。然后可以使用输出重定向 ( >) 将其发送到文件而不是屏幕。

如果你真的想大开眼界,那就读读TLDP 关于 I/O 重定向的章节。它可能比你的书更原始一些,但它是可靠的、经过检验的东西。实际上(刚刚又读了一遍),它的解释相当不错。

输入的位置比标准管道更加灵活。以下是有效的:

< filename sort > sortedfilename

相关内容