Как сортировать, используя команды grep и sort?

14

Я хотел бы создать отсортированный список всех служб TCP, найденных в файле /etc/services, направить вывод команды grep tcp /etc/servicesв команду sort, а затем перенаправить вывод этого канала в файл ~/pipelab.txt.

Я получаю сообщение об ошибке, что мой вывод неверен, и я не знаю, почему.

Это то, что я пробовал в прошлом:

grep tcp /etc/services > ~/pipelab.txt | sort
user72510
источник

Ответы:

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(и в итоге перенаправление победило, и записали несортированный вывод в ваш файл).

derobert
источник
Большое спасибо, я думал, пока я помещаю команду сортировки где угодно, она все еще будет работать.
user72510
1
@ user72510 Трубопроводы обрабатываются по порядку, слева направо. Это действительно полезно, например, если вы хотите первые пять строк отсортированного вывода, вы можете сделать это grep tcp /etc/services | sort | head -n 5. Важно, чтобы это sortбыло сделано до head, или вы не получили бы строки, которые вы хотите.
Дероберт
Спасибо, что объяснили это. Я беру урок онлайн, поэтому я учу себя. К тому же, мне 40, это медленное обучение.
user72510