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
El artículo Grep: Aprendiendo Shell Scripting usando el comando de terminal grep aparece primero en Grep: Aprendiendo Shell Scripting usando el comando de terminal grep.