Grep: Aprendiendo Shell Scripting usando el comando de terminal grep

Aprendiendo Shell Scripting usando el comando de terminal: grep

El comando “grep” en los Sistemas Operativos Libres del tipo GNU/Linux es un comando muy valioso y útil. Su nombre proviene de la frase en ingles: “Global Regular Expression Print” y el mismo es utilizado para realizar la tarea de hallar, coincidir y visualizar un patrón de búsqueda o una expresión regular de un (1) archivo o varios archivos de texto.

Básicamente el comando “grep” busca el patrón señalado en los parámetros de la orden de comando, e imprime los resultados obtenidos siguiendo las indicaciones los parámetros de la orden de comando, los cuales pueden ser: la Pantalla o un Archivo de salida.

Introducción al comando “grep”

Ya en otras publicaciones anteriores del mismo blog, tal como esta “Algunos comandos básicos sobre …” hemos comentado sobre el uso básico de este grandioso comando, pero en esta publicación veremos un uso más intermedio y avanzado del comando “grep” dentro de funcionales y útiles ordenes de comandos que nos pueden facilitar ciertas labores reales dentro de nuestros script de shell o directamente sobre el terminal para lograr un resultado más inmediato sobre una tarea especifica a realizar.

Ejemplos Prácticos

Visualizar nuestra posición/ubicación

Imprimir el contenido de nuestro directorio actual mediante un árbol de directorio gráfico:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'

Ejemplo:

Generar una contraseña aleatoria de 30 caracteres de longitud

Generar cadenas aleatorias dentro de /dev/urandom para luego seleccionar y visualizar una (1) sola usando un filtrado con el comando “grep” para solo caracteres alfanuméricos, con la condición del tamaño de los primeros 30 caracteres, eliminando todos los avances de línea.

strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo

Ejemplo:

Generar un resumen gráfico de conexiones

Visualizar en forma gráfica (tabla) y resumida el numero de conexiones de red internas y externas detectadas por el comando “netstat” de un host en un determinado momento.

netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'

Ejemplo:

También puede usarse para generar una tabla de resumen de los números de conexiones por tipo de ellas, tal como se muestra a continuación:

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

Ejemplo:

Buscar una cadena (patrón) dentro de una ruta

Ubicar y mostrar todas las coincidencias de un patrón en los nombres de archivos o contenido de los mismos. El uso de los parámetros para lograr esto son: -R (Recurrencia para los subdirectorios), -n (Mostrar los números de línea de las coincidencias), -i (Ignorar mayúsculas y minúsculas), -s (Suprimir mensajes de “no existe” y “no se puede leer”), -I (Ignorar los archivos binarios en la búsqueda).

grep -RnisI  *

También puede usarse de una forma más avanzada si es usado dentro de una orden de comando con el comando “find” para ubicar un patrón dentro de un tipo de archivo predefinido. tal como se muestra a continuación:

find /opt/MilagrOS -name "*.txt" -exec grep -RnisI "MilagrOS" {} \;

Conocer la cantidad de data en Memoria RAM

Esto es útil para saber con exactitud cuanta data (información) está esperando ser escrita en el disco duro y se requiere forzar el reinicio o apagado de un equipo.

grep ^Dirty /proc/meminfo

Conocer nuestra Dirección IP WAN

Siempre es muy útil conocer nuestra IP WAN de forma automática desde el terminal para luego pasar ese parámetro a otra tarea automatizada. Este ejemplo hace uso del servicio DynDNS para obtenerla.

curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"

Listar los equipos conectados a un segmento de Red

Usando un ciclo for con el comando “ping” y filtrando el resultado con el comando “grep” podemos validar nuestros equipos conectados a la red con el servicio ping habilitado sin necesidad de tener la herramienta NMap.

for i in {1..10}; do ping -c 1 -W 1 192.168.0.$i | grep 'from'; done

Ejemplo:

Para listar el campo de la dirección IP rastreada pueden hacer un uso más avanzado de esta linea,  filtrando los resultados del comando “grep” usando los comandos “awk” y “cut”, tal como se muestra a continuación:

for i in {100..110}; do ping -c 1 -W 1 192.168.0.$i | grep 'from'; done | awk '{ print $4 }' | cut -d ":" -f 1

Ejemplo:

Estos ejemplos de lineas de comando usando el comando grep. Y les sirvan para ser utilizadas directamente desde consola o indirectamente mediante su inserción en algún script (tarea automatizada).

En la siguiente publicación sobre Shell Scripting exploraremos otros comandos.

Si quieres aprender un poco más sobre el comando “grep” visita este enlace “Wiki DEBIAN” y si deseas aprender más sobre Shell Scripting en nuestro propio Blog, puedes darle un vistazo a nuestras otras publicaciones sobre el tema, haciendo clic aquí: Scripting en DesdeLinux


Categorías

GNU/Linux

Administrador de Servidores y Telecomunicaciones con certificación internacional de Linux: 1.- Certified Linux Administrator (CLA) 2.- Certified Linux Operator (CLI)

2 comentarios

  1.   Leandro dijo

    El artículo está genial, muchas gracias.

  2.   Linux Post Install dijo

    De nada un placer! Ahora viene uno con el comando Sed.

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.