Tengo un conjunto de archivos de registro que necesito revisar y me gustaría buscar cadenas específicas en los mismos archivos a la vez. ¿Es esto posible? Actualmente estoy usando
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
¿Cómo uso esto y busco las cadenas de varios archivos a la vez? Si esto es algo que necesita ser programado, ¿alguien puede proporcionar un script simple para hacer esto?
grep
puede tomar más de un argumento de archivo.Respuestas:
fuente
grep
omitir directorios, pero aún así verifico recursivamente todos los archivos?grep -E 'text' **/*
funciona, pero da un mensaje de error para cada subdirectorio (y luego verifica correctamente todos los archivos en ellos)find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
Podrías usar algo como esto:
Esto encontrará todos los archivos con una
.log
extensión y aplicará elgrep
comando.fuente
xargs
y la posibilidad de rotura severa en el espacio en blanco en los nombres de archivo cuando solo puede usarfind . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?Si es más simple, puede especificar cada archivo uno tras otro.
fuente
Si necesita grep en un conjunto arbitrario de nombres de archivo que no pueden ser recuperados por una expresión regular:
¿Cuál es la ventaja de pegar los nombres de archivo uno tras otro? Puede compilar la lista de nombres de archivo en un archivo de texto y luego pegarla.
fuente
Si desea buscar recursivamente en archivos de subdirectorios también, entonces puede usar el siguiente comando
También buscará recursivamente en archivos de subdirectorios
fuente
Esta fue una tarea muy lenta. Y sí, sin duda tenía que estar programado si vas a buscar varias cadenas en varios registros diferentes al mismo tiempo. Pero recientemente tuve que hacer esto y fue bastante doloroso. Sin embargo, está hecho y listo y se puede descargar desde el siguiente enlace:
Descarga de script de búsqueda de registro
La forma en que esto funciona es bastante simple.
Escenario 1: supervisar UNA cadena en solo UN archivo de registro
Escenario 2: supervise cadenas MÚLTIPLES en UN SOLO archivo de registro
Escenario 3: supervisar cadenas individuales / múltiples en varios archivos de registro
Notas:
El _P_ significa OR - Reemplaza la tubería "|" símbolo porque es menos probable que tenga que buscar una cadena que contenga "_P_". Si no desea escribir "_P_", puede sustituir el _P_ con "|".
Cuando use este script, los parámetros que cambiará con frecuencia son:
Cuando use '-ndfoundmul', obtendrá un resultado similar a:
Solución al problema del póster original: escanear en busca de cadenas múltiples en múltiples archivos de registro
Sistemas operativos: Esto fue probado en Ubuntu y Red Hat
fuente
Esto buscará 'fatal o error o crítico o falla o advertencia o cadena de búsqueda' en los archivos con el nombre que comienza con 'log_file?' y la extensión 'lo ' * en la ruta / ruta / a / el / archivo / y le da a la cadena de búsqueda un color aleatorio y un número de línea de impresión en el que se encontró.
fuente
grep
habilidades, así que la mejor de las suertes en tu carrera USE!-E
y-F
no se pueden usar al mismo tiempo, son conflictivos (¿error tipográfico?).La respuesta de JigarGandhi demuestra el uso del comodín asterisco. Hay más de ellos y puedes verlos aquí o corriendo
man 7 glob
.Uno de ellos que me pareció útil es el rango de coincidencia
[]
. Dado que el sistema en el que trabajo produce archivos de registro numerados secuencialmenteproduct.log.1
product.log.2
...
product.log.200
, por ejemplo , es útil hacer grep con un solo comando en 3 o 4 archivos secuenciales, pero no más. Así que estogrep 'whatever' product.log.[5-7]
grep para todos los archivos que terminan con product.log. 5, 6 o 7. El comodín no es necesario para estar al final, por lo que la respuesta de flickerfly se puede simplificar a
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Tenga en cuenta también que estos comodines se pueden usar en otros comandos, así como en,
cp
por ejemplo.fuente
También puede usar llaves si los archivos son todos de la misma carpeta.
Ver un ejemplo
Si agrega una s al grep, esto suprime los errores sobre archivos faltantes
Solo estaba experimentando con esto yo mismo para hacer comandos que funcionan en varias distribuciones donde está en un archivo frente al otro debido a las diferencias del sistema operativo.
Registros de correo
Registros de correo archivados usando 2> / dev / null para suprimir zgrep que faltan advertencias .gz
Referencia: ¿Hay alguna forma de hacer referencia a varios archivos en un directorio sin volver a escribir la ruta completa?
fuente