Comment trier à l'aide des commandes grep et sort?

14

Je voudrais créer une liste triée de tous les services TCP trouvés dans le fichier /etc/services, diriger la sortie de la commande grep tcp /etc/servicesdans la commande sort, puis rediriger la sortie de ce tuyau dans le fichier ~/pipelab.txt.

Je reçois toujours un message d'erreur indiquant que ma sortie est incorrecte et je ne sais pas pourquoi.

Voici ce que j'ai essayé en dernier:

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

Réponses:

11

> ~/pipelab.txtappartient évidemment à la commande du même côté de l'opérateur de pipeline |. C'est-à-dire que vous redirigez la grepsortie vers le fichier au lieu de la rediriger vers sort:

grep tcp /etc/services | sort > ~/pipelab.txt
Hauke ​​Laging
la source
21

Vous essayez à la fois de rediriger la sortie de grepvers un fichier et de la rediriger vers sort. Vous ne pouvez pas faire ça, du moins pas comme ça.

Au lieu de cela, vous voulez vraiment le nourrir pour trier:

grep tcp /etc/services | sort

et ensuite vous voulez rediriger la sortie triée (c'est-à-dire ce qui sort du tri) vers un fichier, vous mettez donc la redirection après le tri:

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

Les canaux et les redirections fonctionnent en changeant où va la sortie de la commande. Deux d'entre eux se sont battus pour la sortie de grep(et finalement, la redirection a gagné et a écrit la sortie non triée dans votre fichier).

derobert
la source
Merci beaucoup, je pensais que tant que je mettrais la commande de tri là où cela fonctionnerait encore.
user72510
1
@ user72510 Les pipelines sont traités dans l'ordre, de gauche à droite. C'est en fait utile, par exemple, si vous voulez les cinq premières lignes de la sortie triée, vous pouvez le faire grep tcp /etc/services | sort | head -n 5. Il est important de le sortfaire avant le head, sinon vous n'obtiendrez pas les lignes que vous voulez.
derobert
Merci d'avoir expliqué cela. Je prends le cours en ligne donc je m'enseigne. Ajoutant que j'ai 40 ans, c'est un apprentissage lent.
user72510