Aquí podría ser tu PUBLICIDAD


Una expresión regular para recuperar la línea anterior en un archivo de registro

votos
2

Mis archivos de registro contienen lo siguiente:

2009-03-12T12:44:27+0000 something was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times

Puedo escribir una expresión regular que recupere la línea con el enunciado último mensaje repetido ..., sin embargo, esa línea no tiene sentido sin recuperar también la línea que la precede.

Habiendo dicho eso, ¿alguien sabe de una expresión regular que me permita recuperar ambas líneas cada vez que se detecta la declaración del último mensaje repetido ...?

Publicado el 12/03/2009 a las 19:07
fuente por usuario Huuuze
En otros idiomas...        العربية       

4 respuestas

votos
2

Editado para ser 2 regex de coincidencia de grupo. Puedes intentarlo en: RegexLib

Menos optimizado pero esto:

([\r\n].*?)(?:=?\r|\n)(.*?(?:last message repeated).*)

Debería trabajar para obtener resultados de algo como esto:

2009-03-12T12:44:27+0000 something1 was logged
2009-03-12T12:44:27+0000 something2 was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
2009-03-12T12:44:27+0000 something3 was logged
2009-03-12T12:44:27+0000 something4 was logged
2009-03-12T12:44:27+0000 something5 was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times

Resultando en:

Matches
First Match, First Group: 2009-03-12T12:44:27+0000 something2 was logged
First Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
Second Match, First Group: 2009-03-12T12:44:27+0000 something5 was logged 
Second Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
Respondida el 12/03/2009 a las 07:20
fuente por usuario Quintin Robinson


Aquí podría ser tu PUBLICIDAD


votos
1

¿Tiene que ser regex? grep le permite obtener un contexto antes y después de la coincidencia ( -B NUMy -A NUMopciones)

Respondida el 12/03/2009 a las 07:21
fuente por usuario Chetan Sastry

votos
0

El patrón ^. * $ Coincide con una línea completa. Traducción: inicio de línea, seguido de cualquier número de caracteres, seguido de fin de línea. Entonces quizás puedas buscar "cualquier línea, seguida por" (el patrón que tienes allí).

Respondida el 12/03/2009 a las 07:21
fuente por usuario gbarry

votos
0

Lo haría de esta manera. Intenta buscar un patrón que incluya dos grupos. El primer grupo es una línea seguida por otro grupo que contiene otra línea con el texto "último mensaje repetido". Entonces el contenido del primer grupo es el texto que está buscando.

Algo así (esto es expresión regular demasiado simplificada):

\n(.*)\n(.*)last message repeated

Ahora el primer valor de grupo contiene la línea que le interesa.

Respondida el 12/03/2009 a las 07:11
fuente por usuario David Pokluda