No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Expresiones Regulares

Curso de Expresiones Regulares

Alberto Alcocer (Beco)

Alberto Alcocer (Beco)

Logs

13/29
Recursos

Las expresiones regulares son muy útiles para encontrar líneas específicas que nos dicen algo muy puntual dentro de los archivos de logs que pueden llegar a tener millones de líneas.

Aportes 78

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Es gracioso ver como el instructor tiene tanta información en la cabeza por decir y trata de ser o hablar de la manera mas simplificada posible sin dejar de un lado todo su conocimiento o su afán de ser literal y muy correcto con sus palabras. 😅👨‍💻🤷‍♂️

Un increíble esfuerzo por dar un excelente curso ya no es una información tan simple de transmitir efectivamente.

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [WARN] Microsoft just bought Github
[LOG DATA] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG DATA] [LOG] [user:@celismx] Did something
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG LINE] [LOG] [user:@celismx] Logged in

Mis expresiones regulares útiles en logs:

Para buscar direcciones IP:

(\d{1,3}\.){3,3}(\d{1,3})

Para buscar líneas sobre métodos HTTP:

^.*((GET)|(POST)|(PUT)|(DELETE)).*$

Para buscar líneas con fechas en el formato día(numero)/mes(nombre)/año(numero):

^.*(\d{1,2}\/\w+\/\d{4,4}).*$

En este enlace pueden generar su data, por si no tienen a la mano.

https://www.generatedata.com

Probé usando grep en la terminal desde la carpeta de logs de npm:

Lo que dice Alberto es muy cierto, quizás el control + F de toda la vida te pueda sacar de un apuro rápido. Sin embargo, para buscar de verdad en logs gigantes (como he tenido que hacer) las expresiones regulares ayudan bastante. Antes de este curso las buscaba en internet, ahora ya puedo hacerlas yo mismo y eso me da muchas ventajas. ¡A seguir aprendiendo amigos!

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@oscar] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG ENTRY] [LOG] [user:@Lis] Logged out
Si quiero encongrar en el log la advertencia utilizaré:

\[LOG.*\[WARN.*

-> Primero se escapa el corchete ya que es un carácter reservado, luego se escribe lo que se desea encontrar, con el simple [log.* se selecciona toda la línea, ahora se vuelve a escapar el corchete y se termina de seleccionar el warn y el resto de la línea con el “.*”.
Si de los logs anteriores quiero encontrar solo los usuarios utilizaré:

^\[log.*\[user.*$

Si quiero encontrar la información de 1 usuario utilizaré:

\[log.*\[user:@oscar.*$

En este ejemplo: https://www.acunetix.com/blog/articles/using-logs-to-investigate-a-web-application-attack/

Buscar líneas con el comando POST y que contengan la palabra admin

"POST.*admin.*

Descripción de la clase por Beco:

Las expresiones regulares son muy útiles para encontrar líneas específicas que nos dicen algo muy puntual dentro de los archivos de logs que pueden llegar a tener millones de líneas.

Colección de logs del diferentes sistemas:

https://github.com/logpai/loghub

tan “sencillo” y a la vez tan útil y poderoso.

Qué hermoso es porder Seleccionar solo lo que quiero

__

Buenas amig@s,
si estáis usando Linux podéis abrir el archivo /var/log/auth.log donde os mostrará diversas operaciones y así podéis buscar información relevante, en mi caso busque los últimos comandos que hice usando sudo.

Les comparto una lista de los caracteres reservados en expresiones regulares.

Símbolo Descripción
[ ] Especificación de rango. (p.e. [a-z] representa una letra en el rango de la a a la z
\w Letra o dígito o guión bajo; es lo mismo que [0-9A-Za-z_]
\W negación de \w
\s Espacio, es lo mismo que [ \t\n\r\f]
\S Negación de \s
\d Dígito; es lo mismo que [0-9]
\D Negación de \d
\b Backspace (0x08) (sólo si aparece en una especificación de rango)
\b Límite de palabra (sólo si no aparece en una especificación de rango)
\B No límite de palabra
* Cero o más repeticiones de lo que precede
+ Una o más repeticiones de lo que precede
[m,n] Al menos m y como máximo n de lo que precede
? Al menos una repetición o ninguna de lo que precede; es lo mismo que [0,1]
| Puede coincidir con lo que precede o con lo que sigue
( ) Agrupamiento

11. Mis apuntes sobre: “Logs”

  • 1. Ejemplo regex: Aplicando negación para buscar logs exactos
^\[LOG.*\[WARN.*\].*$

-Explicación 1: Encuentra y selecciona [match] que sea exactamente una línea que inicie con
[LOG luego tenga 0 o más caracteres, luego [WARN luego 0 o más caracteres, luego ], luego
0 o más caracteres.

  • 2. Ejemplo regex: Aplicando negación para buscar logs exactos
^\[LOG.*\[LOG\].*user:@celismx\].*$

-Explicación 2: Encuentra y selecciona [match] que sea exactamente una línea que inicie con
[LOG luego tenga 0 o más caracteres, luego [LOG] luego 0 o más caracteres, luego user:@celismx],
luego 0 o más caracteres.

  • 3. Ejemplo regex: Aplicando negación para buscar logs exactos
^\[LOG.*\[LOG\].*user:@\w+?\] .*$

-Explicación 3: Encuentra y selecciona [match] que sea exactamente una línea que inicie con
[LOG luego tenga 0 o más caracteres, luego [LOG] luego 0 o más caracteres, luego user:@,
luego 0 o más palabras (words), luego ]. luego un espacio en blanco, luego 0 o más caracteres.

Hice estas instrucciones de RegEx que seleccionan cualquier log (como los vistos en clase) 😉

(\[\w+(\W+)?(\w+)?\]\s){1,}(\w+\s){1,}
falto una clase del uso de \ ni siquiera entendi porque empezo a usarlo y tuve que buscar documentación, terrible preparación de las clases.
tampoco hay nada del scope, el case sensitive, la verdad las primeras 4 clases son una introducción en la que no hace nada y repite lo mismo, este curso esta demasiado regular.

Recuerdo que una vez vi que la particion del disco duro en la que estaba la carpeta raiz de linux, estaba al tope , solo le habia dado como 35GB y de alguna forma llegué que en la carpeta que contiene los Logs habían dos archivos con 8GB de peso cada una, cuando quise abrirlos con un editor, este se quedó colgado. Luego pude leerlo con tail en la consola, aun soy novato en linux, pero descubrí leyendo esas ultimas lineas del log que la particion donde estaba linux estaba llena justamente por esos dos logs y me generaba un problema ya que no podia pasar de la ventana del login a pesar de pasar bien mis credenciales.

Ciertamente trabajar con Logs es uno de los ejemplos más utilizados, por ejemplo, lo utilizo para parsear orígenes de Logs que no tengan integración nativa en el SIEM (IBM QRadar) para poder extraer los campos que queremos tener de ese origen de datos.

Con este programa de Java es posible filtrar los logs de un archivo gigante usando Streams e imprimiendo en pantalla las lineas que hagan match con la regex indicada:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.regex.Pattern;
import java.util.stream.Stream;

public class LogsExample {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("regex");
        Path filePath = Paths.get("filePath");
        try (Stream<String> stream = Files.lines(filePath)) {
            stream.filter(line -> pattern.matcher(line).find()).
                    forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

import re

fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()

fh

line = re.findall('\[LOG.*\[ERROR\].*', fh) 
print(line)

interesante y util

Parece complejo pero no lo es, hay que prestar mucha atención y ser cuidadoso al elegir lo que filtrará.

En el contexto de \*\*expresiones regulares (regex)\*\*, los \*\*logs\*\* pueden ser analizados y filtrados eficientemente para extraer patrones específicos, identificar eventos o detectar errores recurrentes en grandes cantidades de datos. Las expresiones regulares permiten buscar, filtrar y extraer partes relevantes de los registros de log, lo que facilita la depuración y el análisis de datos. \### \*\*Aplicaciones de Expresiones Regulares en Logs\*\* 1\. \*\*Buscar patrones específicos\*\*: \- Filtrar líneas que contienen errores, advertencias, o eventos importantes. 2\. \*\*Extraer información relevante\*\*: \- Obtener fechas, direcciones IP, códigos de estado, usuarios, entre otros. 3\. \*\*Agrupación de eventos\*\*: \- Clasificar eventos por su severidad o tipo. \### \*\*Ejemplos comunes de uso de Expresiones Regulares en Logs\*\* \#### 1. \*\*Buscar registros de errores (`ERROR`)\*\* Puedes utilizar una expresión regular para buscar cualquier línea que contenga la palabra \*\*ERROR\*\* en un archivo de log. \- \*\*Regex\*\*: `.\*ERROR.\*` \- Esto buscará cualquier línea que tenga la palabra \*\*ERROR\*\* en cualquier parte de la línea. Ejemplo: ``` Sep 22 12:34:56 hostname systemd\[1]: ERROR Failed to start Apache2 Web Server. ``` \#### 2. \*\*Filtrar por direcciones IP\*\* Si quieres extraer direcciones IP de los logs, puedes usar la siguiente expresión regular: \- \*\*Regex\*\*: `\b\d{1,3}\\.\d{1,3}\\.\d{1,3}\\.\d{1,3}\b` \- Esto buscará direcciones IP en formato IPv4. Ejemplo: ``` 192.168.1.1 - - \[22/Sep/2024:12:34:56] "GET / HTTP/1.1" 200 2326 ``` La regex coincidirá con \*\*`192.168.1.1`\*\*. \#### 3. \*\*Extraer fechas en formato estándar\*\* En muchos logs, las fechas están en el formato `dd/mm/yyyy` o similar. Para extraer fechas en ese formato: \- \*\*Regex\*\*: `\b\d{2}/\d{2}/\d{4}\b` \- Esto encontrará fechas como `22/09/2024`. Ejemplo: ``` 192.168.1.1 - - \[22/09/2024:12:34:56] "GET / HTTP/1.1" 200 2326 ``` La regex coincidirá con \*\*`22/09/2024`\*\*. \#### 4. \*\*Extraer códigos de estado HTTP\*\* En logs de servidores web como \*\*Apache\*\* o \*\*Nginx\*\*, puedes extraer los códigos de estado HTTP (como 200, 404, 500, etc.) con una expresión regular. \- \*\*Regex\*\*: `"\s(\d{3})\s"` \- Esto buscará números de tres dígitos, que generalmente corresponden a los códigos de estado HTTP. Ejemplo: ``` 192.168.1.1 - - \[22/Sep/2024:12:34:56] "GET / HTTP/1.1" 200 2326 ``` La regex coincidirá con \*\*`200`\*\*, el código de estado. \#### 5. \*\*Filtrar logs por una hora específica\*\* Si tienes logs con marcas de tiempo y quieres filtrar eventos ocurridos en una hora específica (por ejemplo, entre 14:00 y 14:59), puedes usar: \- \*\*Regex\*\*: `\b14:\d{2}:\d{2}\b` \- Esto buscará cualquier marca de tiempo que comience con \*\*14:xx:xx\*\*. Ejemplo: ``` Sep 22 14:15:45 hostname sshd\[12345]: Accepted password for user ``` La regex coincidirá con \*\*`14:15:45`\*\*. \### \*\*Combinaciones complejas de Expresiones Regulares en Logs\*\* \#### 1. \*\*Buscar registros con errores y extraer detalles de IP y timestamp\*\* Supongamos que queremos buscar líneas que contienen la palabra \*\*ERROR\*\*, extraer la dirección IP, y también la marca de tiempo asociada. \- \*\*Regex\*\*: `(\b\d{1,3}\\.\d{1,3}\\.\d{1,3}\\.\d{1,3}\b).\*ERROR.\*(\b\d{2}/\d{2}/\d{4}\b)` Esta expresión regular busca: 1\. Una dirección IP. 2\. La palabra \*\*ERROR\*\*. 3\. Una fecha en formato \*\*dd/mm/yyyy\*\*. Ejemplo: ``` 192.168.1.1 - - \[22/09/2024:12:34:56] "ERROR Failed to connect to database" ``` Coincidirá con \*\*`192.168.1.1`\*\* y \*\*`22/09/2024`\*\*. \#### 2. \*\*Validar direcciones IPv6\*\* Si necesitas trabajar con IPv6, la expresión regular es más compleja: \- \*\*Regex\*\*: `\b(?:\[0-9a-fA-F]{1,4}:){7}\[0-9a-fA-F]{1,4}\b` Esto buscará direcciones IP en formato IPv6. Ejemplo: ``` fe80::1ff:fe23:4567:890a - - \[22/Sep/2024:12:34:56] "GET / HTTP/1.1" 200 2326 ``` Coincidirá con \*\*`fe80::1ff:fe23:4567:890a`\*\*. \### \*\*Delimitadores y operadores útiles en logs con regex\*\* 1\. \*\*`.\*`\*\*: Coincide con cualquier cantidad de caracteres (incluso ninguno). \- Ejemplo: `.\*ERROR.\*` busca líneas que contengan la palabra ERROR en cualquier parte. 2\. \*\*`|`\*\*: Operador OR. \- Ejemplo: `ERROR|WARNING` busca líneas que contengan \*\*ERROR\*\* o \*\*WARNING\*\*. 3\. \*\*`^` y `$`\*\*: Coinciden con el inicio y el final de una línea. \- Ejemplo: `^ERROR` coincide con líneas que comienzan con \*\*ERROR\*\*. 4\. \*\*`\[0-9]`\*\*: Clase de caracteres que coincide con cualquier dígito del 0 al 9. \- Ejemplo: `\d{3}` coincide con cualquier secuencia de tres dígitos, útil para códigos de estado HTTP. \### \*\*Beneficios de usar expresiones regulares en logs\*\* \- \*\*Automatización\*\*: Permiten extraer información relevante automáticamente en sistemas grandes. \- \*\*Precisión\*\*: Filtran eventos específicos sin tener que revisar manualmente cada línea. \- \*\*Flexibilidad\*\*: Pueden ajustarse a distintos formatos de logs, ya que son agnósticas al formato del texto. \### \*\*Herramientas que usan regex para análisis de logs\*\* 1\. \*\*grep\*\*: \- Comando de Unix/Linux para buscar patrones en archivos. \- Ejemplo: ``` grep -E "ERROR.\*192\\.168\\.\d{1,3}\\.\d{1,3}" /var/log/syslog ``` 2\. \*\*Logwatch\*\*: \- Herramienta para generar informes a partir de registros de log, donde se pueden aplicar filtros con regex. 3\. \*\*Splunk y ELK\*\*: \- Herramientas de análisis que permiten usar regex para extraer datos de registros en tiempo real. En resumen, las \*\*expresiones regulares\*\* son una herramienta poderosa para analizar logs y extraer información crítica de manera automatizada y precisa.
Hola a todos, Necesito ayuda en lo siguiente, necesito capturar la info de cada columna: ![](https://static.platzi.com/media/user_upload/image-91b4cc73-a2d0-479b-9141-78811e2c32e1.jpg) Grcias!

Hola! Aqui quise hacer una expresion que solo me hiciera match con los LOGS que tuvieran como minimo dos corchetes con informacion dentro, pero que obligatoriamente luego de los corchetes y para terminar la linea tengan informacion en texto.

Obtenemos todos los corchetes con algún contenido interno.

[.+?]

Es increible la forma de utilizar los logs en expresiones regulares y su capacidad de usarlos.

/\[LOG.*\[WARN\].*/g
/\[LOG.*\[LOG\].*/g
/\[LOG.*\[LOG\].*user:@celismx] .*/g

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [WARN] Microsoft just bought Github
[LOG DATA] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG DATA] [LOG] [user:@celismx] Did something
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG LINE] [LOG] [user:@celismx] Logged in

Con esta también pude encontrar las fechas de los logs en formato dias/mes/anio

\d{2,2}\/\w{3}\/\d{4,4}

Use esta Regex para encontrar direcciones IP en un archivo de logs

((\d{2,3}\.+\d{2,3}\.?))

Ejemplo

Tomando un archivo log de Apache que contiene la estampa de tiempo en el inicio de cada línea, es posible buscar los errores y filtrar aún más por los estados:

^.*\[error\].*state 7$

Para encontrar una fecha en forma dd-mm-aaaa

^(?:3[01]|[12][0-9]|0?[1-9])([\-/.])(0?[1-9]|1[1-2])\1\d{4}$

Esta solo encuentra la fecha

si lo que necesitamos es la linea donde esta la fecha

agregamos al inicio y fin .*

^.*(?:3[01]|[12][0-9]|0?[1-9])([\-/.])(0?[1-9]|1[1-2])\1\d{4}.*$

Ejemplos:
31.12.3013
01/01/2013
5-3-2013
15.03.2013

para encontrar la etiqueta [error]

^.*\[error\].*$

Y de esta otra forma todas las lineas que contengas direcciones IP

^.*[0-9]+(?:\.[0-9]+){3}.*$

De esta forma encontramos solo las direcciones IP

[0-9]+(?:\.[0-9]+){3}

[LOG ENTRY] [WARN] Microsoft just bought Github
😆

revisión de un fichero de apache
https://regexr.com/6ahj6

obtener

  • ip o url
  • fecha hora y puerto
  • texto (verbo + url + protocolo)
  • codigo de salida 200, 404, …
  • total de bytes

expression

(([\d.]{7,16})|([\w\.]+)) - - (\[.+?\]) "(.+?)" (\d{3}) (\d+)

extracto de Traza

64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846
lj1036.inktomisearch.com - - [07/Mar/2004:17:18:36 -0800] "GET /robots.txt HTTP/1.0" 200 68
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
64.242.88.10 - - [07/Mar/2004:16:11:58 -0800] "GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55 -0800] "GET /twiki/bin/view/Main/DCCAndPostFix HTTP/1.1" 200 5253

Detalle linea 1

64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846
64.242.88.10
64.242.88.10
<empty>
[07/Mar/2004:16:05:49 -0800]
GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1
401
12846

Detalle linea 2

lj1036.inktomisearch.com - - [07/Mar/2004:17:18:36 -0800] "GET /robots.txt HTTP/1.0" 200 68
lj1036.inktomisearch.com
<empty>
lj1036.inktomisearch.com
[07/Mar/2004:17:18:36 -0800]
GET /robots.txt HTTP/1.0
200
68

regexr.com/6ahib

expression

^(\d{2}:?){3}\.\d{3} \[(.+)\] (DEBUG|WARN) (\w+\.?){5} - (.*)$

Texto

16:59:22.057 [main] DEBUG com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.
16:59:22.062 [main] WARN com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.!!

Descomposición en 5 grupos

  • minutos
  • contenido del corcherte [ ]
  • tipo de mensaje si es DEBUG o WARN
  • nombre de la clase
  • texto

Detalle linea 1

16:59:22.057 [main] DEBUG com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.
22
main
DEBUG
LogBackBasicExample
Hello world.

Detalle linea 2

16:59:22.062 [main] WARN com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.!!
22
main
WARN
LogBackBasicExample
Hello world.!!

Una muy sencilla, todas las peticiones GET que envien el parametro REV 1.N

^.*"GET.*rev=1.[1-9]+

Probe unsando grep en los logs de pacman para ver todos los paquetes que se han instalado:

 grep -E installed' '\w+ pacman.log

![](

Usé esta expresión regular para buscar direcciones IP

(\d{1,3}\.){3,3}(\d{2,2}){1,1}
\]\s?\"GET

------------------------------------------------------------
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
64.242.88.10 - - [07/Mar/2004:16:11:58 -0800] "GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55 -0800] "GET 

El filtrado de logs para encontrar puntualmente la información de determinados eventos.

Cada vez me gusta mas este curso

.*WARN.*
.*LOG.*celismx.*
.*LOG.*user.*

Muy interesante!

excelente clase

Buscar los registros de LOG:

^\[LOG.*(.*LOG.*).*$

^\d{2,3}.\d{2,3}.\d{2,3}.\d{2,3}."POST.$

mi código

^\[LOG.*\[LOG\].*user:@\w+?\] .*$

Logs

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@celismx] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG ENTRY] [LOG] [user:@celismx] Rated the app
[LOG ENTRY] [LOG] [user:@celismx] Logged out

mi expresion para traer ip con xxx.xxx.x.xxx

^(\d{1,3}[.\d]){4,4}$

^[LOG.ERROR].$

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [WARN] Microsoft just bought Github

Corriendo como demonios… ja ja ja…

Excelente.

muy buena clase excelente conocer toda la potencia que puede llegar a tener una expresión regular a comparacion de un simple ctrl + f XD

Sublime tiene esa función así que es otra opción 😉

Buenas noches

En esta expression no tengo claro que funcion tienen los backslash antes de los corchetes:
^[LOG.*[WARN*].user:@celismx**] .*$
Alguien puede darme un manito con la ecplicacion ?

excelente!

super

//buscamos todo lo que inicie con log y le siga un log con cualquier usuario

[LOG ENTRY] [ERROR] The system is unstable //no hace match
[LOG ENTRY] [WARN] The system may be down //no hace match
[LOG ENTRY] [LOG] Everything is
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out

^\[LOG.*\[LOG\].*user:@\w+?\] .*$

^[LOG.*[LOG.beco.$

No encontré archivos log pero sí encontré el log del repositorio del curso de Git.

Muchas gracias por la explicación de esta utilidad instructor Alberto. Respecto al reto esta fue la última línea de uno de los proyectos que tenía:

sourceId=datosOrganismos:msgp[severity=(ERROR 2), summary=(No se pudo realizar conexión con el GeoCodificador, verifique...), detail=(No se pudo realizar conexión con el GeoCodificador, verifique...)]

Esta fue la expresión regular que use para filtrarla de todas las demas:

^\w*.+\[.+\(ERROR.*\).*

Como podría hacer para buscar con regex un archivo de log con la fecha mas actual y la hora ? el sistema de donde descargo archivos los guarda por días y por horas ?

Warning!: Microsoft just bought Github

jajajaj

Basta de editores de texto, lo cool es usar la consola en Linux

El código en grep (consola en linux) para buscar todos los Logged In/Out

grep -E -nio '^.+\[LOG.+\].+Log.+' logs.txt

El contenido del archivo que uso el profe esta en los links en las primeras clases, pero de cualquier manera les dejo un poco de material para que practiquen:

1:[LOG ENTRY] [ERROR] The system is unstable
2:[LOG ENTRY] [WARN] The system may be down
3:[LOG ENTRY] [WARN] Microsoft just bought Github
4:[LOG DATA] [LOG] Everything is OK
5:[LOG ENTRY] [LOG] [user:@irving] Logged in
6:[LOG ENTRY]  [LOG] [user:@irving] Clicked here
7:[LOG DATA]  [LOG] [user:@celismx] Did something
8:[LOG ENTRY]  [LOG] [user:@irving] Rated the app
9:[LOG ENTRY]  [LOG] [user:@irving] Logged out
10:[LOG LINE]  [LOG] [user:@celismx] Logged in

Excelente clase!!!

Para los que no saben que es log básicamente y resumidamente es un archivo que registra eventos e información que ocurren en un sistema operativo o otro tipo de software similar.

¿Qué hicimos?

  • ^ Recuerda que este símbolo es para indicar una nueva línea
  • [ Recuerda que el corchete se puede usar para crear clases por lo que se debe de indicar va a ser parte de nuestra búsqueda y no para crear una clase por lo que se usa el carácter “”
  • .* Aquí decimos que encuentre lo que sea
  • $ fin de línea
     
    ^[LOG.[WARNING].$
    ^[LOG.[ERROR].$
    Por lo que le decimos a nuestro buscador mis indicaciones deben de hacer match en una sola línea deben de empezar con [LOG después puede haber cualquier cosas pero debe de seguirle un [WARNING] o [ERROR] (dependiendo el caso) y puede haber o no más cosas después
     
    ^[LOG.*[ERROR].user:@celismx] .$

^[LOG.*[ERROR].user:@\w+] .$\

Mis instrucciones debe de hacer match en una línea, debe empezar con un [LOG puede seguir lo que sea pero debe de haber un [ERROR] después puede haber más cosas pero debe de aparecer un user:@ cualquier cosas ] y puede haber o no más cosas

Mi expresión para encontrar todos los logs de Mon Mar 8 en el transcurso de las 3 de la tarde

^\[Mon Mar 8 03:..*$```