Como extrair substrings múltiplas do log FIle

1

Estou tentando extrair o registro de data e hora e a cadeia numérica no URL chamado em um arquivo de log do apache que se parece com isso:

123.456.78.90 - - [16/Dec/2014:06:27:30 +0100] "GET /servlet/something.something=%2B2341231231234&subappid=hello&pass=hello&from=somebody&dlrreq=true&intflag=TRUE HTTP/1.1" 200 31 "-" "python-requests/2.5.0 CPython/2.7.3 Linux/2.6.32-431.el6.x86_64"

Até agora eu posso usar o awk para extrair o timestamp e o URL inteiro.

awk '{print $4,$5} {print $6}' /var/log/httpd/access_log

Por favor, como eu posso remover apenas a string numérica 2341231231234 para que apenas o timestamp e esta string estejam na mesma linha?

    
por Sina 16.12.2014 / 09:10

1 resposta

0

Supondo que todas as suas linhas tenham o mesmo formato de URL, você pode obter a string de data e hora e o número com um comando sed como este:

$ sed -r 's|.*\[(.*)\].*=%(.*)&sub.*| |g' /var/log/httpd/access_log
16/Dec/2014:06:27:30 +0100 2B2341231231234

Essa expressão usa o que quer que exista dentro de [ e ] (deve ser o timestamp) e o que quer que exista entre =% e &sub (deve ser a string numérica).

    
por 16.12.2014 / 22:57