Jak sortować za pomocą poleceń grep i sort?


15

Chciałbym utworzyć posortowaną listę wszystkich usług TCP znalezionych w pliku /etc/services, potokować wyjście polecenia grep tcp /etc/servicesdo polecenia sort, a następnie przekierować wyjście tego potoku do pliku ~/pipelab.txt.

Ciągle pojawia się komunikat o błędzie, że moje dane wyjściowe są nieprawidłowe i nie wiem dlaczego.

Oto, co próbowałem ostatnio:

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

Odpowiedzi:


11

> ~/pipelab.txtoczywiście należy do polecenia po tej samej stronie operatora potoku |. Oznacza to, że przekierowujesz dane grepwyjściowe do pliku zamiast pipetować go do sort:

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

21

Próbujesz przekierować dane wyjściowe grepdo pliku i przesłać je do potoku sort. Nie możesz tego zrobić, a przynajmniej tak nie jest.

Zamiast tego naprawdę chcesz go po prostu posortować:

grep tcp /etc/services | sort

a następnie chcesz przekierować posortowane dane wyjściowe (tj. co wychodzi z sortowania) do pliku, więc przekierowujesz po sortowaniu:

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

Zarówno potoki, jak i przekierowania działają, zmieniając kierunek wyjścia polecenia. Dwa z nich walczyły o dane wyjściowe grep(i ostatecznie przekierowanie wygrało i zapisało nieposortowane dane wyjściowe do pliku).


Dziękuję bardzo, myślałem, że dopóki wstawię polecenie sortowania w dowolnym miejscu, to nadal będzie działać.
— user72510,

1
@ user72510 Rurociągi są przetwarzane w kolejności od lewej do prawej. To jest naprawdę przydatne, na przykład, jeśli chcesz pierwsze pięć wierszy posortowanego wyjścia, możesz to zrobić grep tcp /etc/services | sort | head -n 5. Ważne jest, sortaby zrobić to przed head, inaczej nie dostaniesz linii, które chcesz.
— derobert

Dziękuję za wyjaśnienie tego. Biorę lekcje online, więc uczę się. Dodając do tego, że mam 40 lat, powoli się uczę.
— user72510,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.