Como copiar linhas de acesso.log por tempo?

1

Eu tenho um enorme servidor web access.log no CentOS. Eu acesso-o através de VPN remota, então eu não posso copiar o arquivo ou lê-lo diretamente.

Eu sei o tempo específico nos logs que eu quero copiar, mas é muito antigo copiar muito facilmente um log do log em um arquivo de texto. Aqui está como é uma linha do log.

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

Então, minha pergunta é : Como posso copiar uma seção específica de um log muito grande se souber as sequências de tempo que quero encontrar?

    
por blarg 27.03.2014 / 10:54

1 resposta

3

O comando grep é projetado para mostrar apenas as linhas correspondentes de um determinado arquivo. Com o uso da opção -C , é possível mostrar não apenas a (s) linha (s) correspondente (s), mas também algumas linhas antes e depois dela.

Então, para ter as 3 linhas antes e depois da linha que você deseja:

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

Você também pode ajustar com mais precisão o número de linhas exibidas após e / ou antes das linhas correspondentes com as opções -A e -B . De fato, -C 3 é o mesmo que -A 3 -B 3 .

Se houver mais de uma linha correspondente, grep exibirá as três linhas antes e depois do bloco de linhas correspondentes.

Exemplo:

$ 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.
    
por 27.03.2014 / 11:02