¿Cómo copiar líneas de access.log por tiempo?

¿Cómo copiar líneas de access.log por tiempo?

Tengo un enorme acceso al servidor web.log en CentOS. Accedo a él a través de una VPN remota, por lo que no puedo copiar el archivo ni leerlo directamente.

Sé el tiempo específico en los registros que quiero copiar, pero está demasiado atrás y es demasiado fácil copiar el final del registro a un archivo de texto. Así es como se ve una línea del registro.

10.255.16.203 - - [26/Mar/2014:16:35:13 +0000]

Entonces mi pregunta es:¿Cómo puedo copiar una sección específica de un registro muy grande si sé las cadenas de tiempo que quiero encontrar?

Respuesta1

El grepcomando está diseñado para mostrar solo líneas coincidentes de un archivo determinado. Con el uso de -Cla opción es posible mostrar no sólo las líneas coincidentes sino también algunas líneas antes y después de ellas.

Entonces, para tener las 3 líneas antes y después de la línea que deseas:

$ grep -C 3 "26/Mar/2014:16:35:13 +0000" access.log

También puede ajustar con mayor precisión el número de líneas que se muestran después y/o antes de las líneas coincidentes con las opciones -Ay -B. De hecho -C 3es lo mismo que -A 3 -B 3.

Si hay más de una línea coincidente, grepse mostrarán las 3 líneas antes y después del bloque de líneas coincidentes.

Ejemplo:

$ grep -C 3 "25/Mar/2014:10:40:59 +0100" access.log
10.0.0.44 - httpuse [25/Mar/2014:09:41:17 +0100] "GET /dummy/BIGDummy_133644_1565_DL.xml.gz HTTP/1.1" 200 507 "-" "-"
10.0.0.43 - httpuse [25/Mar/2014:09:59:51 +0100] "GET /dummy/BIGDummy_133647_48267_DL.xml.gz HTTP/1.1" 200 1677 "-" "-"
10.0.0.44 - httpuse [25/Mar/2014:10:40:42 +0100] "GET /dummy/BIGDummy_133664_39603_DL.xml.gz HTTP/1.1" 200 1677 "-" "-"
10.0.0.40 - httpuse [25/Mar/2014:10:40:59 +0100] "GET /dummy/BIGDummy_133664_DL.xml.gz HTTP/1.1" 200 60142 "-" "-"
10.0.0.41 - httpuse [25/Mar/2014:10:40:59 +0100] "GET /dummy/BIGDummy_133667_23124_DL.xml.gz HTTP/1.1" 200 5202 "-" "-"
10.0.0.40 - httpuse [25/Mar/2014:10:43:09 +0100] "GET /dummy/BIGDummy_133668_46_DL.xml.gz HTTP/1.1" 200 445 "-" "-"
10.0.0.42 - httpuse [25/Mar/2014:10:43:10 +0100] "GET /dummy/BIGDummy_133668_4116_DL.xml.gz HTTP/1.1" 200 597 "-" "-"
10.0.0.40 - httpuse [25/Mar/2014:10:43:13 +0100] "GET /dummy/BIGDummy_133665_DL.xml.gz HTTP/1.1" 200 57902 "-" "-"

De man grep:

NAME
   grep, egrep, fgrep - print lines matching a pattern

SYNOPSIS
   grep [options] PATTERN [FILE...]

DESCRIPTION
   Grep  searches  the  named  input  FILEs (or standard input if no files are named,
    or the file name - is given) for lines containing a match to the given PATTERN.
   By default, grep prints the matching lines.

OPTIONS
    -A NUM, --after-context=NUM
            Print  NUM  lines  of  trailing context after matching lines.
            Places a line containing -- between contiguous groups of matches.

    -B NUM, --before-context=NUM
            Print NUM lines of leading context before matching lines.
            Places a line containing --  between  contiguous  groups  of matches.

    -C NUM, --context=NUM
            Print  NUM  lines  of  output  context.
            Places a line containing -- between contiguous groups of matches.

información relacionada