# Notas sobre expresiones regulares

Encontrar un solo carácter:

- `.` Corresponde a cualquier carácter
- `[abc]` corresponde a `a`, `b` or `c` (exactamente un carácter)
- `[0-9]` corresponde a cualquier dígito, o lo mismo que `[0123456789]`
- `[0-9a-z.]` Corresponde a 0-9 o a a-z o a un punto
- `\d` es otra forma de encontrar un dígito
- `\s` corresponde a cualquier espacio en blanco (o tab)

Repeticiones:

- Agregar `*` a un elemento lo hace corresponder cualquier número de veces (cero o más)
- Agregar `?` a un elemento lo hace opcional (puede aparecer cero veces o una vez)
- Agregar `+` a un elemento hace que pueda aparecer una o más veces

Position:

- `^` corresponde al comienzo de línea
- `$` corresponde al fin de línea

Agrupación:

- `(....)` agrupa una parte del patrón, o sea que `(....)?` hace toda la sección opcional
- `(xxx|yyy)` corresonde al patrón `xxx` o `yyy`

Concordancia de caracteres reservados (escaping):

- `\.` Concuerda con el símbolo de punto real
- `[.]` Otra manera de buscar un punto
- `\[` y `\]` encuentra los caracteres `[` and `]`
- `\(` y `\)` encuentra los caracteres `(` and `)`

# Excluir mensajes

## Excluir mensajes con ciertos patrones

Supongamos que no nos interesan los mensajes de resumen de nfcapd:

    group ^nfcapd:
    trash Total ignored packets
    trash Ident:.*Flows:.*Packets:.*Bytes:.*Sequence Errors:.*Bad Packets
    group_end

Otro ejemplo:

    group ^sshd:
    trash ^sshd: Connection closed by.*\[preauth\]
    trash ^sshd: Received disconnect from
    trash ^sshd:.*from 10\.10\.0\.250
    group_end

## Excluir mensajes provenientes de un nodo en particular

Supongamos que queremos excluir mensajes que contengan cierto patrón pero sólo si provienen de un nodo en particular: ~~~ group_host ^10.10.0.254$ trash ^dhcpd: trash ^charon: trash ^filterlog: trash ^check_reload_status: Reloading filter trash ^check_reload_status: Restarting ipsec tunnels trash ^check_reload_status: Restarting OpenVPN tunnels trash ^check_reload_status: Syncing firewall group_end ~~~

# Resumir mensajes similares

Si un patrón se define dentro de paréntesis ’( … )`, entonces se excluirá, de modo que muchos mensajes similares se puedan reportar como uno solo.

Por ejemplo, supongamos que recibimos muchísimos mensajes como estos:

        1: sshd: Connection closed by 10.10.6.22 port 38060 [preauth]
        1: sshd: Connection closed by 10.10.6.24 port 39308 [preauth]
        1: sshd: Connection closed by 10.10.4.16 port 50620 [preauth]
        1: sshd: Connection closed by 10.10.4.15 port 58252 [preauth]

y usted quiere combinarlos en un solo mensaje resumido en Tenshi. Pruebe:

    misc ^sshd: Connection closed by ([0-9.]+) port (\d+) \[preauth\]

Esto resultará en el siguiente mensaje de Tenhi:

        4: sshd: Connection closed by  port  [preauth]