Juntando IP's de um log complicado

2

Eu tenho uma pergunta sobre o uso de alguns mais avançados grep, awk, sed. Eu tenho um arquivo de log, para um MTA proprietário, que contém IP em uma seqüência de caracteres, delimitada por [redacted]^~x.x.x.x^[redacted] . Até agora, todos os meus grepping, awking e sedding não me levaram muito longe.

Este arquivo de log tem 331520 linhas nele. Meu objetivo era simplesmente pegar o ip, depois fazer um loop for com o sed para / $ i / redacted '. Estou incluindo uma amostra de uma das entradas de log. Se todos vocês tiverem alguma ideia, eu ficaria muito grato.

Jun  4 15:21:52 host.name mta-name: 13388^~88/CC-04671-FCA0DCF4^~D^~<redactedmessageid>^~@^[email protected]^~redacted.hostname^~000.00.000.000^~port^~esmtp^~^~external_routing_nobounce^~0^~0.51^~subjectofmessage^~250 2.6.0 <redactedmessageid> [InternalId=2178458] Queued mail for delivery    
    
por Harry 06.06.2012 / 03:33

2 respostas

4

Deseja substituir os endereços IP pela string "[redacted]"? Não há necessidade de grep then sed em um loop. sed te dá um loop e "grepping" de graça.

sed 's/\^~[[:digit:]]\+\(\.[[:digit:]]\+\)\{3\}/^~[redacted]^~/' logfile
    
por 06.06.2012 / 03:48
0

Eu percebi isso. Mais páginas do homem. Uma pequena modificação do meu comando grep com -o me mostrou uma lista dos endereços, com sort | uniq , consegui uma lista

grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' log.file | sort -n | uniq
    
por 06.06.2012 / 03:42