¿Cómo puedo canalizar la salida de un comando a la entrada de otros dos comandos simultáneamente?
Parece que el comando tee
hará lo que quieras.
La clave es usar
>( )
para sustitución de proceso . Con tee
, use el siguiente patrón:
tee >(proc1) >(proc2) >(proc3) | proc4
Entonces, si desea utilizar la salida de ls
como entrada a dos programas grep
diferentes, guarde la salida de cada grep
en archivos diferentes y canalice todos los resultados a través de less
, prueba:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
Los resultados de la ls -A
se "canalizará" en ambos grep
s. El archivo hidden-files
tendrá el contenido de la salida del primer grep
, y normal-files
tendrá los resultados del segundo grep
. Todos los archivos se mostrarán en el localizador [~ # ~] editar [~ # ~] : lo que ves en less
.less
es el la misma salida exacta de ls -A
, no el resultado de grep
s. Si desea modificar la salida de ls -A
a less
, (por ejemplo, cambiando el orden para que los archivos normales se enumeren antes de los ocultos) y luego intente esto:
ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less
Sin >/dev/null
, la salida de grep
s se agregaría a la salida de ls -A
en lugar de reemplazarlo.
Utilice "tee".
Ejemplo:
grep someSearchString someFile | tee /dev/tty | wc -l > grepresult
Esto enviará la salida del comando grep tanto a la terminal como a wc (cuya salida a su vez se redirige al archivo grepresult).
"Tee" se explica en el artículo de Wikipedia tee (comando). Central es: "El comando tee lee la entrada estándar, luego escribe su contenido en la salida estándar y lo copia simultáneamente en los archivos o variables especificados".