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