04. Shell: comandos de filtrado

Publicado por
Comandos de filtrado.
Comandos de filtrado.

Retomando la nota Shell: Pipes, se puede recordar que existen 3 canales de comunicación para un proceso, de los cuales STDIN es el encargado de leer desde teclado y STDOUT lanza resultados a la pantalla, cualquier comando que use estos dos canales puede ser utilizado para generar filtros a la información que se desea obtener en pantalla. En esta nota se presentan algunos de los comandos más utilizados para filtrar información.

grep

Comencemos con el comando consentido de muchos, este comando es uno de los más utilizados ya que permite realizar búsquedas en el texto que recibe como entrada y lanza como salida todas las líneas que concuerden con el patrón especificado, además este comando permite el uso de expresiones regulares. ¿Qué es una expresión regular? Es un patrón de búsqueda que está conformado por una serie de caracteres que pueden aparecer dentro de una cadena.

Uso

$ grep [opciones] [expresión regular] [archivo]

Acertijo: ¿Qué es lo que realiza cada comando?

$ grep root /etc/passwd
$ grep -v root /etc/passwd
$ grep -w oo /etc/passwd
$ grep -E 'r..t' /etc/passwd
$ grep -E "r.*t" /etc/passwd
$ grep -w -E "r.*t" /etc/passwd

Respuestas:

En el archivo /etc/passwd

1. Busca la cadena root y muestra en pantalla todas las líneas donde encontró coincidencia. 

2. Muestra en pantalla todas las líneas que no contienen la cadena root.

3. Busca la palabra oo y muestra en pantalla todas las líneas donde ésta fue encontrada.

4. Busca las coincidencias con la expresión regular r..t, esto es todas las cadenas que cumplan con el patrón:

La cadena debe iniciar con una r.

El punto indica que puede ser cualquier caracter por lo que .. significa que la r va seguida de 2 caracteres cualesquiera.

Finalmente la cadena termina con una t. Esta coincidencia puede estar al inicio, en medio o final de una cadena y no necesariamente es una palabra.

5. Busca las coincidencias en cadenas de texto con la expresión regular r.*t, esto es todas las cadenas que cumplan con el patrón:

La cadena debe iniciar con una r.

El .* indica que va seguida de 0 o más caracteres cualesquiera.

Termina la cadena con una t. Esta coincidencia puede ser al inicio, en medio o final de una cadena, no necesariamente es una palabra.

6. Busca las palabras con la expresión regular r.*t, esto es todas las cadenas que cumplan con el patrón:

La cadena debe tener una r.

El .* indica que va seguida de 0 o más caracteres cualesquiera.

Termina la cadena con una t. A diferencia de los otros dos ejemplos en este caso necesariamente tiene que ser una palabra y estar formada así de principio a fin.

 Opciones del comando

 Algunas opciones del comando son:

-v Muestra las líneas en las que no aparece el patrón.

-w Muestra las líneas en las que aparecen palabras que cumplen con el patrón.

-x Muestra las líneas en las que el patrón coincide con toda la línea.

-c Muestra la cantidad de líneas que coinciden con el patrón.

-E Permite usar expresiones regulares como opción de búsqueda.

-i No discrimina entre mayúsculas y minúsculas durante su búsqueda.

sort

Este comando permite ordenar las líneas desde STDIN o bien desde uno o varios archivos.

Uso

$ sort [opciones] [archivo] [salida]

Acertijo: ¿Qué es lo que realiza cada comando?

$ sort /etc/passwd
$ ls -l | sort -r
$ sort archivo > archivo_ordenado
$ sort archivo1 archivo2 > archivo_final
$ sort -o archivo -u archivo

Respuestas:

1. Ordena las líneas del archivo /etc/passwd.

2. Muestra los archivos del directorio actual en orden descendente.

3. Ordena las líneas de un archivo y las guarda en otro.

4. Combina las líneas ordenadas de dos archivos y las guarda en un tercero.

5. Ordena las líneas de un archivo, elimina aquellas repetidas y guarda los cambios en el mismo archivo.

Opciones del comando

Algunas opciones del comando son:

-b Ignora todos los espacios en blanco.

-r Ordena de mayor a menor.

-u Suprime las líneas repetidas después de que las ordena.

-f Indica que las mayúsculas y las minúsculas son tratadas de forma diferente.

-n Ordena los campos de acuerdo a su valor numérico.

cut

Este comando permite cortar caracteres y campos, usando delimitadores y otras opciones, para poder extraer solamente las partes del archivo que se desean en la salida estándar (STDOUT).

Uso

$ cut [opciones] [archivo] [salida]

Acertijo: ¿Qué es lo que realiza cada comando?

$ echo "Hola mundo, estoy usando el comando cut" | cut -d "," -f 1
$ echo "Hola mundo, estoy usando el comando cut" | cut -d "," -f 2
$ echo "Hola mundo, estoy usando el comando cut" | cut -c 10-15
$ echo "Hola mundo, estoy usando el comando cut" | cut -c 1-15
$ cut -d "," -f 1 archivo.txt
$ cut -d "," -f 5 archivo.txt
$ cut -d "," -f 1-5 archivo.txt
$ cut -c 1,5 archivo.txt
$ cut -c 1-5 archivo.txt

 Respuestas: 

1. Imprime en pantalla la primera parte de la cadena que se encuentra antes del delimitador “,”.

2. Imprime en pantalla la segunda parte de la cadena que se encuentra después del delimitador “,”.

3. Imprime en pantalla los caracteres que se encuentran de la posición 10 a la 15 en la cadena.

4. Imprime en pantalla los caracteres que se encuentran de la posición 1 a la 15 en la cadena.

5. Muestra la primer subcadena que se encuentra en el archivo.txt antes del delimitador “,”.

6. Muestra la quinta subcadena que se encuentra en el archivo.txt antes del delimitador “,”.

7. Muestra la primera y la quinta subcadena que se encuentran en el archivo.txt utilizando el delimitador “,” para separar las cadenas.

8. Muestra el primer y quinto caracter del archivo.txt.

9. Muestra del primer al quinto caracter del archivo.txt.

Opciones del comando

Algunas opciones del comando son:

-c Selecciona solamente los caracteres que se indiquen.

-d Usa el delimitador indicado para separar la cadena.

-f Selecciona los campos (fields) indicados solamente.

-b Selecciona solamente los bytes indicados.

-s Las líneas que no contienen delimitadores son omitidas.

uniq

Este comando filtra las líneas repetidas en un archivo o que provienen de la entrada estándar (STDIN).

Uso

$ uniq [opciones] [archivo] [salida]

Acertijo: ¿Qué es lo que realiza el siguiente comando?

$ cut -d : -f 7 /etc/passwd | sort | uniq -c

Respuesta:

Primero, cada una de las líneas en /etc/passwd es dividida en campos usando el delimitador dos puntos [:]. De esos campos, se selecciona únicamente el campo número 7 y el resultado es enviado a la entrada estándar del comando sort para ser ordenada. Una vez ordenada la lista resultante, el comando uniq muestra únicamente las líneas que no se repiten anteponiendo el número de veces que aparecen en la entrada original.

Opciones del comando

Algunas opciones del comando son:

-c Agrega el número de líneas en las que se encontró la ocurrencia.

-d Muestra una sola vez la ocurrencia buscada.

-D Muestra las líneas duplicadas.

Durante las notas de esta temporada 01: Fundamentos básicos de la shell, se aprendió cómo desprenderse del uso de las teclas de navegación, cómo usar los 3 tipos de canales de comunicación en la terminal y los pipes, también se explicó el uso de variables tanto locales como de ambiente o entorno, y finalmente en esta nota se dieron a conocer algunos de los comandos de filtrado más utilizados y cómo pueden trabajar en conjunto. No olvides hacer tus comentarios y sugerencias directamente en esta nota o en cualquiera de nuestras redes sociales.

Espero, esta temporada haya sido de tu agrado y que te aportara algún conocimiento nuevo. Recuerda que este solo es el inicio de un largo camino que se tiene que recorrer para aprender las delicias de ser un administrador de sistemas GNU/Linux. Próximamente la temporada 02: scripting en Bash ¡Espérala! que dentro de poco se estará publicando. ¡Hasta pronto!

6 comments

  1. Excelente tu información me esta ayudando mucho a entender el uso de muchos comando mas a profundidad de grep y sort, también me ha quedado muy claro la definicion de los 3 canales. STDIN, STDERR, STDOUT.

Responder a Freizer Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *