Filtros, redirecciones y tuberías

Rafa Morales 8 Mayo 2013
8min
0
Linux

FILTROS

Los filtros nos permiten personalizar o modificar la salida de la ejecución de un comando de diversas maneras.

 

sort

Muestra por la salida estándar el contenido de un fichero ordenado de manera alfabética. Se pueden utilizar los siguientes parámetros:

  • -n: emplear orden numérico.
  • -d: emplear orden alfabético (por defecto).
  • -f: ignorar mayúsculas y minúsculas.
  • -r: ordenación inversa.
  • -k: ordenar por un determinado campo.
  • -t: definir el carácter de separación de campo (espacio por defecto).
sort doc1
sort –r doc1

 

shuf

Muestra por la salida estándar las líneas del contenido de un fichero de manera aleatoria:

shuf doc1

 

more

Muestra por la salida estándar el contenido de un fichero pero paginado. Similar a la orden cat pero página a página y no entero de una sola vez.

more doc1

 

less

Es un comando más completo que more, ya que muestra la salida paginada pero añadiendo más funcionalidad, por ejemplo, avance y retroceso de páginas. Está basado en los comandos del editor vi, al pulsar cualquier tecla aparecerán dos puntos tras los cuales escribiremos la orden. La tecla q es para salir.

less doc1

 

tail

Muestra la parte final de un documento. Con el parámetro –n le indicamos cuántas líneas finales deseamos visualizar.

tail -n 10 doc1
tail -10 doc1

 

Si al número le ponemos el signo + indica que se debe mostrar desde ese número de línea hasta el final, es decir, de la línea 10 al final en nuestro caso.

tail –n +10 doc1

 

head

Muestra la parte inicial de un documento. Con el parámetro –n le indicamos cuántas líneas iniciales deseamos visualizar.

head -n 10 doc1
head -10 doc1

Podemos mostrar todas las líneas menos el número que digamos utilizando un número negativo.

head -n -10 doc1

 

grep

Busca en un fichero la cadena de texto indicada y la muestra por la salida estándar.

  • [ ... ] : conjunto de caracteres.
  • [ a-z ] : con el guíon, rangos en conjuntos de caracteres.
  • [ ^ ... ] : complemente del conjunto de caracteres.
  • . : cualquier carácter.
  • * : la expresión se repite 0 o más veces.
  • + : la expresión se repite 1 o más veces.
  • { n, m } : la expresión se repite entre m y n veces.
  • ^ : comienzo de la línea.
  • $ : final de la línea.
grep “A” doc1
grep [ahj] doc1
grep [a-z] doc1
grep [a-zA-Z0-9] doc1
grep ^aeiou doc1
grep aeiou$ doc1

Además se pueden utilizar los siguientes parámetros:

  • -i: ignorar mayúsculas y minúsculas.
  • -n: numerar las líneas.
  • -c: no mostrar la salida, sólo contar el número de coincidencias.
  • -h: suprimir nombre de fichero coincidente (sólo mostar la línea).
  • -l: suprimir la línea coincidente (sólo mostrar nombres de ficheros).
  • -v: invertir la salida (buscar líneas NO coincidentes).

 

cut

Muestra, de un fichero ordenado por campos separados por un determinado carácter, sólo las columnas que nosotros le indiquemos. Como ejemplo utilizaremos el fichero /etc/passwd en el que cada fila posee unos campos separados por dos puntos “:”. Indicaremos los campos que queramos mostrar mediante su número separado por comas (pero sin espacios en blanco), sabiendo que el primer campo es el 1. También podemos indicar un intervalo con el guión “-“.

cut –d “:” –f1 /etc/passwd
cut –d “:” –f1,2,6 /etc/passwd
cut –d “:” –f1-4 /etc/passwd

Para cortar de un número de carácter específico a otro.

cut –c 1-5 /etc/passwd

 

wc

Muestra el número de líneas -l, palabras -w, caracteres -m o bytes –c de un documento.

wc –l doc1
wc –w doc1
wc –m doc1
wc –c doc1

 

uniq

Elimina las líneas repetidas de un archivo.

uniq doc1

 

tr

Cambia, borra o comprime caracteres.

  • “set1” “set2”: va cambiando cada caracter de set1 por el correspondiente de set2.
  • -d: borra caracteres indicados.
  • -s: comprime a uno sólo secuencias repetidas de los caracteres indicados.
  • -c: complementa el conjunto de caracteres indicados.
tr "set1" "set2"
tr "a-z" "A-Z"

 

tee

Este filtro recoge datos de la entrada estándar y los redirige a la salida estándar y a un fichero especificado, tanto en operaciones de escritura como de añadidura. Esta orden suele usarse en procesos largos para observar y registrar la evolución de los resultados.

configure 2>&1| tee salida.txt
configure 2>&1| tee -a salida.txt​​

 

REDIRECCIONES

El redireccionamiento se utiliza para modificar la salida o entrada estándar, normalmente tras la ejecución de un comando en modo consola. La entrada estándar, la salida estándar y la salida de error se asocian a los programas mediante tres ficheros con los cuales se comunican con otros procesos y con el usuario. Estos tres ficheros son:

  • stdin (entrada estándar): A través de este descriptor de fichero los programas reciben datos de entrada. Normalmente stdin está asociado a la entrada del terminal en la que está corriendo el programa, es decir, al teclado. Cada descriptor de fichero tiene asignado un número con el cual podemos referirnos a él dentro de un script, en el caso de stdin es el 0.
  • stdout (salida estándar): es el descriptor de fichero en el que se escriben los mensajes que imprime el programa. Normalmente estos mensajes aparecen en la pantalla para que los lea el usuario. Su descriptor de fichero es el número 1.
  • stderr (salida de error): es el descriptor de fichero en el que se escriben los mensajes de error que imprime el programa. Normalmente coincide con stdout. Tiene como descriptor de fichero el número 2.

 

<

Redireccionamiento de entrada: Con él podremos introducir los datos que nos solicite el comando mediante un fichero o la salida de otro comando. Por ejemplo, el comando siguiente

cat < fichero

 

>

Redireccionamiento de salida: Con él podremos enviar la salida de un comando hacia un fichero, otro comando o un dispositivo.

ls –l > fichero
ls –l > /dev/null

 

>>

Redireccionamiento de adición: Es un redireccionamiento de salida con la peculiaridad de que la salida la añade al destino indicado, normalmente un fichero, y por tanto no borra su contenido.

man ls >> fichero

ls /etc >> /dev/tty4

 

2> 2>>

Redireccionamiento de errores: De esta manera sólo redirigimos los errores que produzca el comando hacia otro dispositivo de salida que no sea la pantalla. Puede ser de adición también.

cp doc1 doc2 2> /dev/null
cp doc1 doc2 2>> fichero_error

Se pueden combinar la salida estándar con la de errores.

cp –v /boot/* /root/copia/ >> boot.log 2>> error.log

 

&> &>>

Redireccionamiento completo: De esta manera redirigimos con un solo comando tanto la salida normal como la salida de errores al mismo destino, puede ser de adición también. Los siguientes ejemplos son similares en su resultado.

cp –v /boot/* /root/copia/ >> boot.log 2>> boot.log
cp –v /boot/* /root/copia/ &>> boot.log

 

&1 &2 &3 ...

Redireccionamiento por parámetros: De esta manera redirigimos a un destino que ya se ha nombrado anteriormente en el mismo comando, el número indica la posición de ese destino. Vemos como el ejemplo anterior también se podría escribir de la siguiente manera.

cp –v /boot/* /root/copia/ >> boot.log 2>> &1

 

TUBERÍAS, PIPES O ENCADENAMIENTO DE COMANDOS

Es posible introducir en una misma línea dos o más órdenes separadas por el carácter tubería o pipe (|). De esta forma podemos ejecutar un comando y hacer que el resultado de éste sea la entrada para otro, que a su vez puede servir de entrada a un tercero.

ls –l | wc –l

man ls | more

echo –e “password\npassword” | passwd usuario

 

Observamos cómo podemos utilizar los filtros en la salida de otros comandos. Introduciendo el carácter \n simulamos el intro que el comando pudiera solicitar por teclado al usuario.