Substituir caracteres [RESOLVIDO]

1. Substituir caracteres [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/11/2013 - 15:18h

OLa pessoal, tenho um arquivo que esta da seguinte forma...


14:32:36.476554 -192.168.11.20.49357= +72.21.91.203.443:*
14:32:36.477140 -192.168.11.20.49447= +199.16.156.70.443:*
14:32:36.495381 -192.168.11.20.49449= +199.16.156.70.443:*
14:32:36.577317 -192.168.11.20.49448= +199.16.156.70.443:*
14:32:36.612582 -192.168.11.20.49455= +93.184.216.139.443:*
14:32:36.614670 -192.168.11.20.49455= +93.184.216.139.443:*
14:32:36.656537 -192.168.11.20.49452= +23.206.139.120.443:*

Esse arquivo é um log do tcpdump ouvindo a porta 443. Quando gerado essa arquivo eu preciso de algumas informações dele.

Essas informações são:

HORA = 14:32:36 -----> nesse formato
IP ORIGEM 192.168.11.20 -------> nesse formato
IP DESTINO 72.21.91.203 ---------> nesse formato

Ou seja ao final o arquivo deve ficar assim:


HORA IP ORG IP DEST

14:32:36 192.168.11.20 72.21.91.203
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 93.184.216.139
14:32:36 192.168.11.20 93.184.216.139
14:32:36 192.168.11.20 23.206.139.120

Ja tentei com o awk e com o sed, mas nao obtive muito exito. Então o que eu fiz foi inserir alguns caracteres como o +, = e * para que eu pudesse identificar o final de cada dado e atraves do PHP fazer essa "limpeza" no arquivo.

Mas eu gostaria de fazer isso com shell script

Alguem tem alguma ideia que possa me ajudar???


  


2. MELHOR RESPOSTA

Fernando
phoemur

(usa Debian)

Enviado em 27/11/2013 - 16:23h

Utilizando as mesmas marcações que você introduziu:

Existem muitas maneiras de fazer isso.
Com sed:

sed 's/^\(.*\)\..*-\(.*\)\..*=.*+\(.*\)\..*:.*$/\1 \2 \3/g' arquivo.txt


Saída:
[quote]
phoemur ~/bash/teste $ cat arquivo.txt
14:32:36.476554 -192.168.11.20.49357= +72.21.91.203.443:*
14:32:36.477140 -192.168.11.20.49447= +199.16.156.70.443:*
14:32:36.495381 -192.168.11.20.49449= +199.16.156.70.443:*
14:32:36.577317 -192.168.11.20.49448= +199.16.156.70.443:*
14:32:36.612582 -192.168.11.20.49455= +93.184.216.139.443:*
14:32:36.614670 -192.168.11.20.49455= +93.184.216.139.443:*
14:32:36.656537 -192.168.11.20.49452= +23.206.139.120.443:*
phoemur ~/bash/teste $ sed 's/^\(.*\)\..*-\(.*\)\..*=.*+\(.*\)\..*:.*$/\1 \2 \3/g' arquivo.txt
14:32:36 192.168.11.20 72.21.91.203
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 93.184.216.139
14:32:36 192.168.11.20 93.184.216.139
14:32:36 192.168.11.20 23.206.139.120
[/code]

3. Re: Substituir caracteres [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/11/2013 - 16:31h

PERFEITO ESSE SEU EXEMPLO

phoemur ~/bash/teste $ cat arquivo.txt
14:32:36.476554 -192.168.11.20.49357= +72.21.91.203.443:*
14:32:36.477140 -192.168.11.20.49447= +199.16.156.70.443:*
14:32:36.495381 -192.168.11.20.49449= +199.16.156.70.443:*
14:32:36.577317 -192.168.11.20.49448= +199.16.156.70.443:*
14:32:36.612582 -192.168.11.20.49455= +93.184.216.139.443:*
14:32:36.614670 -192.168.11.20.49455= +93.184.216.139.443:*
14:32:36.656537 -192.168.11.20.49452= +23.206.139.120.443:*

phoemur ~/bash/teste $ sed 's/^\(.*\)\..*-\(.*\)=.*+\(.*\):.*$/\1 \2 \3/g' arquivo.txt
14:32:36 192.168.11.20.49357 72.21.91.203.443
14:32:36 192.168.11.20.49447 199.16.156.70.443
14:32:36 192.168.11.20.49449 199.16.156.70.443
14:32:36 192.168.11.20.49448 199.16.156.70.443
14:32:36 192.168.11.20.49455 93.184.216.139.443
14:32:36 192.168.11.20.49455 93.184.216.139.443
14:32:36 192.168.11.20.49452 23.206.139.120.443


Mas eu preciso dessas informações sem as portas, nesse caso assim:

14:32:36 192.168.11.20 72.21.91.203
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 199.16.156.70
14:32:36 192.168.11.20 93.184.216.139
14:32:36 192.168.11.20 93.184.216.139
14:32:36 192.168.11.20 23.206.139.120

O que eu tenho e estou tentando é com o grep ,as nao consigo mostrar a hora, somente os ips de origem e destino

o comando é: grep -P -o '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)'




4. Re: Substituir caracteres [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 27/11/2013 - 16:39h

já corrigi


5. Re: Substituir caracteres [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/11/2013 - 16:50h

Perfeito, parabéns e muito obrigado!!!


6. Uso do grep

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/11/2013 - 17:10h

Só mais uma pergunta....

No caso de eu usar o grep

A seguinte regra que tenho no tcpdum é:

tcpdump -i p5p1 src -n net 192.168.8.0/22 and port 443 | awk '{print $1, $3, $5}' | grep -P -o '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)'


Só que dessa forma ele me traz certo o IP de ORIGEM e o IP de DESTINO só nao esta trazendo as HORAS

Teria uma dica???






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts