
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.
Enlaces transversales de Book para Filtros, redirecciones y tuberías
Filtros, redirecciones y tuberías escrito por Rafa Morales está protegido por una licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional