unixDestacado
Home » Tecnología » Búsquedas con grep, encontrar un texto en ficheros

Búsquedas con grep, encontrar un texto en ficheros

Publicado en: Tecnología

Cuando queremos buscar un texto, un párrafo, una palabra… dentro de un fichero de texto usando cualquier Unix / Linux, lo mejor no es editar el fichero (vi, nano…), ni hacer una cat para ver el contenido en pantalla, ni siquiera copiárnoslo a nuestro equipo y abrirlo con un editor de texto cualquiera, BBEdit, SublimeText, Coda

Lo mejor es utilizar GREP. Grep como comando directo es lo que os cuento hoy. También podéis pasarlo como parámetro en una búsqueda anidada a un cat, un find, o cualquier comando que ejecutéis, utilizando el | (pipe).

La ventaja de usarlo como comando directo es poder buscar en múltiples ficheros a la vez, consumiendo menos recursos de máquina, que enlazarlo a otro comando.

Ejemplos de uso.

Para buscar desde Terminal una cadena de texto exacta dentro de muchos ficheros de un directorio

# grep ’texto_a_buscar’ /ruta/directorio/*.extension

Ejemplo:
# grep ‘code=123’ /mnt/MiApp/repo/*.txt

 

Para buscar en TODOS los ficheros, de forma recursiva de un directorio y sus subdirectorios:

# grep -r ’texto_a_buscar’ /ruta/directorio/

 

En un log, donde buscar el tiempo de arranque de un servicio es algo habitual, en Alfresco me sucede cada vez que reinicio, no es suficiente para conocer la hora en que se ha producido. Y una o dos líneas anteriores o posteriores hay una indicación con fecha y hora del paso inmediatamente anterior o posterior al arranque de servicio. Con grep solo muestra la línea completa que incluya el texto buscado, pero si te interesa conocer además un número de líneas anteriores o posteriores a la encontrada, puedes juar con los parámetros -B (before) y -A (after) pasándole como argumento el número de líneas. Veamos como sería:

Mostrar líneas antes del texto buscado:
-B X
con X el número de líneas

Mostrar líneas después del texto buscado:
-A X
con X el número de líneas

Ejemplo de caso práctico, buscar en Alfresco la hora de arranque del servicio alfresco

# grep "Server startup" -B 1 /opt/alfresco/tomcat/logs/catalina.out

Y nos devolvería la línea inmediatamente anterior a la línea encontrada en el fichero, tantas veces como ‘Server startup’ exista en el fichero de log. Podéis hacerlo con cualquier fichero.

 

SaludoX