¿Cómo clasifico usando los comandos grep y sort?

14

Me gustaría crear una lista ordenada de todos los servicios TCP encontrados en el archivo /etc/services, canalizar la salida del comando grep tcp /etc/servicesen el comando sorty luego redirigir la salida de esta tubería al archivo ~/pipelab.txt.

Sigo recibiendo un mensaje de error que dice que mi salida es incorrecta y no sé por qué.

Esto es lo que probé por última vez:

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

Respuestas:

11

> ~/pipelab.txtobviamente pertenece al comando en el mismo lado del operador de canalización |. Es decir, redirige la grepsalida al archivo en lugar de canalizarlo a sort:

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

Intenta redirigir la salida de grepun archivo y canalizarlo a sort. No puedes hacer eso, al menos no así.

En cambio, realmente solo quieres alimentarlo para ordenar:

grep tcp /etc/services | sort

y luego desea redirigir la salida ordenada (es decir, lo que está saliendo de la clasificación) a un archivo, por lo que coloca la redirección después de la clasificación:

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

Tanto las canalizaciones como las redirecciones funcionan cambiando dónde va la salida del comando. Tuviste dos de ellos peleando por la salida de grep(y finalmente, la redirección ganó y escribió la salida sin clasificar en tu archivo).

derobert
fuente
Muchas gracias, pensé que mientras pusiera el comando de clasificación en cualquier lugar, aún funcionaría.
user72510
1
@ user72510 Las tuberías se procesan en orden, de izquierda a derecha. Eso es realmente útil, por ejemplo, si desea las primeras cinco líneas de la salida ordenada, puede hacerlo grep tcp /etc/services | sort | head -n 5. Es importante que sortse haga antes del head, o no obtendrá las líneas que desea.
derobert
Gracias por explicar eso. Estoy tomando la clase en línea, así que me estoy enseñando. Agregando que tengo 40 años, es un aprendizaje lento.
user72510