如何使用grep和sort命令进行排序?


15

我想创建一个在文件中找到的所有TCP服务的排序列表,/etc/services将命令的输出通过管道传递grep tcp /etc/services到命令中sort,然后将该管道的输出重定向到文件中~/pipelab.txt

我不断收到一条错误消息,指出我的输出是错误的,我也不知道为什么。

这是我最后尝试过的:

grep tcp /etc/services > ~/pipelab.txt | sort

Answers:


11

> ~/pipelab.txt显然属于管道运算符同一侧的命令|。也就是说,您将grep输出重定向到文件,而不是将其通过管道传递到sort

grep tcp /etc/services | sort > ~/pipelab.txt

21

您正在尝试将的输出重定向grep到文件并将其通过管道传输到sort。您不能那样做,至少不是那样。

相反,您实际上只想将其进行排序:

grep tcp /etc/services | sort

然后您想要将排序后的输出(即,发生排序问题)重定向到文件,因此将重定向放在排序后:

grep tcp /etc/services | sort > ~/pipelab.txt

管道和重定向都通过更改命令输出的位置来工作。您有两个在争夺来自的输出grep(最终,重定向获胜,并将未排序的输出写入了文件)。


非常感谢,我认为只要将sort命令放在仍然可以使用的任何地方。
user72510 2014年

1
@ user72510从左到右依次处理管道。这实际上很有用,例如,如果您想要排序输出的前五行,则可以这样做grep tcp /etc/services | sort | head -n 5。重要的sort是要在之前完成head,否则您将无法获得所需的行。
derobert

感谢您的解释。我正在在线上课,所以我在教自己。加上我40岁,这是缓慢的学习。
user72510 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.