Skip to content

03 Pipelines

Alan edited this page Jun 13, 2026 · 1 revision

Pipelines

Tabla de Contenidos

Qué son los Pipelines

Los pipelines son una funcionalidad de los shells que permite enviar el stdout de un comando como stdin de otro comando. Esto se efectúa mediante el operador pipe |:

admin@server:~$ comando1 | comando2

Donde el comando1 le pasa su stdout como stdin al comando2.

Por ejemplo:

admin@server:~$ tree ~ | less

Note

Es importante aclarar que los pipelines solo pasan el stdout del comando anterior, no el stderr. El stderr se sigue mostrando en la terminal a menos que se redirija explícitamente.

Filtros

Haciendo uso de los pipelines podemos filtrar datos (texto) a través de una serie de comandos. Los filtros toman un input, lo modifican de alguna forma y luego lo envían como un output.

Existen muchos comandos que se pueden utilizar como filtros. En este documento mostraremos (sin profundizar) algunos de los filtros más populares.

Tip

Si bien puedes utilizar el comando cat para imprimir (o extraer) el contenido de un archivo y pasárselo a un comando usando un pipe |, por ejemplo:

admin@server:~$ cat archivo | sort

Evita utilizarlo si el comando acepta archivos como argumento, ya que esto es innecesario y consume más recursos. Por lo tanto, el ejemplo anterior puede ser reescrito de la siguiente forma:

admin@server:~$ sort archivo

Note

Para algunos ejemplos de filtros, utilizaremos el siguiente comando:

admin@server:~$ ls /bin /usr/bin

Este comando imprime los programas ejecutables (comandos) instalados en el sistema.

El Comando sort

Con el comando sort, podemos filtrar el output de un comando, ordenando cada una de las líneas de texto (alfabéticamente por defecto), por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort

El Comando uniq

Con el comando uniq, podemos filtrar el output (ordenado) de un comando, eliminando las líneas repetidas, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq

Tip

Para que uniq funcione correctamente, el stdin debe estar previamente ordenado (o al menos que las líneas repetidas estén juntas), para ello utilizamos el comando sort como filtro.

El Comando wc

Con el comando wc, podemos filtrar el output de un comando, imprimiendo la cantidad de líneas, palabras y bytes de dicho output, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq | wc

Asimismo, podemos agregar la opción -l, para que solamente imprima el número de líneas, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq | wc -l

El Comando grep

Con el comando grep, podemos filtrar el output de un comando, imprimiendo aquellas líneas que contengan cierto patrón de texto, por ejemplo:

admin@server:~$ sort ~/.bash_history | uniq | grep apt install

Note

El comando anterior muestra (alfabéticamente y sin repeticiones) las líneas que contengan apt install (comandos usados para instalar programas con el package manager apt) en el historial de comandos de bash (~/.bash_history).

El Comando head

Con el comando head, podemos filtrar el output de un comando, imprimiendo las primeras 10 líneas, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq | head

También podemos especificar cuántas primeras líneas mostrar, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq | head -n 5
admin@server:~$ ls /bin /usr/bin | sort | uniq | head -5

El Comando tail

Con el comando tail, podemos filtrar el output de un comando, imprimiendo las últimas 10 líneas, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq | tail

También podemos especificar cuántas últimas líneas mostrar, por ejemplo:

admin@server:~$ ls /bin /usr/bin | sort | uniq | tail -n 5
admin@server:~$ ls /bin /usr/bin | sort | uniq | tail -5

El Comando nl

Con el comando nl, podemos filtrar el output de un comando, enumerando cada una de las líneas, por ejemplo:

admin@server:~$ sort ~/.bash_history | uniq | grep apt install | nl

El Comando cut

El comando cut es un comando que permite remover secciones específicas de texto de las líneas de un archivo. Es usado principalmente para archivos con delimitadores (e.g., CSV, TSV, PSV).

Ejemplo 1: Filtrando por Delimitadores

Con el comando cut, podemos filtrar el output de un comando mediante delimitadores, por ejemplo:

admin@server:~$ sort /etc/passwd | cut -d : -f 1,5-7

Donde:

  • La opción -d especifica el delimitador (sin esta opción, el delimitador por defecto es el tab); en este caso : (-d :)

  • La opción -f especifica los números de los campos a visualizar; en este caso, el campo 1, y del 5 al 7 (-f 1,5-7). Estos campos del archivo /etc/passwd son usuario, descripción, directorio home y shell predeterminado respectivamente.

Ejemplo 2: Filtrando por Bytes/Caracteres

Con el comando cut, podemos filtrar el output de un comando extrayendo caracteres (-c) o bytes (-b) de cada línea, especificando su posición, por ejemplo:

admin@server:~$ echo -e "Valeria\nEduardo\nElisa" | cut -b 1-3,6
Vali
Edud
Eli
admin@server:~$ echo -e "Valeria\nEduardo\nElisa" | cut -c 1-3,6
Sana
Edud
Eli

El comando anterior imprime los primeros tres bytes/caracteres y el sexto byte/carácter de una lista de nombres.

Important

De momento la opción -b y -c se comportan de la misma manera. La opción -c debería tener soporte para caracteres multibyte (caracteres que ocupan más de un byte), tales como ¿, ñ, á, por ejemplo:

admin@server:~$ echo "Andrés" | cut -b 5

admin@server:~$ echo "Andrés" | cut -c 5
é

El Comando tee

Con el comando tee, podemos imprimir el output de un comando y, al mismo tiempo, guardarlo en un archivo, por ejemplo:

admin@server:~$ sort ~/.bash_history | uniq | grep apt install | tee apt-install.txt

El comando anterior muestra y guarda en el archivo apt-install.txt (alfabéticamente y sin repeticiones) las líneas que contengan apt install (comandos usados para instalar programas con el package manager apt) en el historial de comandos de bash (~/.bash_history).

Con la opción -a o --append, podemos añadir texto en un archivo en vez de sobreescribirlo, por ejemplo:

admin@server:~$ sort ~/.bash_history | uniq | grep apt install | tee -a apt-install.txt

Referencias

  • Shotts, W. (2019). Redirection. The Linux Command Line (2nd ed., pp. 49-60). No Starch Press.

Introducción a los Sistemas Operativos

Introducción a Linux

Licencias de Software

Archivos y Directorios

Introducción a la CLI

Manipulación de Archivos y Directorios

Documentación y Exploración de Comandos

Redirección

Búsqueda de Archivos y Texto

Editores de Texto de Terminal

Gestión de Usuarios y Grupos

Propiedad y Permisos

Herramientas Esenciales

Hardware

Apéndice

Clone this wiki locally