Noticia Grep: Aprendiendo Shell Scripting usando el comando de terminal grep

comando_grep_desdelinux-1.png

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:


Grep_Ejemplo1_DesdeLinux-830x467.png


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:

Grep_Ejemplo2_DesdeLinux-830x442.png

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:

Grep_Ejemplo3_DesdeLinux-830x442.png

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:

Grep_Ejemplo7_DesdeLinux-830x442.png

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 *

Grep_Ejemplo4_DesdeLinux-830x442.png

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" {} \;

Grep_Ejemplo6_DesdeLinux-830x442.png

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

Grep_Ejemplo5_DesdeLinux-830x442.png

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:].]\+"

Grep_Ejemplo8_DesdeLinux-830x442.png

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:

Grep_Ejemplo9_DesdeLinux-830x442.png

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:

Grep_Ejemplo10_DesdeLinux-830x442.png

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.


j4vGPy4MvyI


Continúar leyendo...