Ajuda de script para filtrar um endereço IP

Ajuda de script para filtrar um endereço IP

Eu tenho um arquivo de texto grande do qual desejo extrair linhas de dados, quero extrair todas as linhas que contenham um endereço IP que eu possa especificar (zzzz)

2015-02-26 00:00:00 Local3.Info x.x.x.x Feb 26 05:19:52  y.y.y.y 00:05:06:17 , C8:D7:19:61:D1:9B DHCP REQ: Valid IP->Valid IP
2015-02-26 00:00:00 Local3.Info x.x.x.x Feb 26 05:32:56  y.y.y.y 00:0D:8A:80 , 48:F8:B3:54:43:EB DHCP REQ: Valid IP->Valid IP
2015-02-26 00:00:00 Local5.Notice   x.x.x.x Feb 26 05:32:56  z.z.z.z BTS Sending CDR: 067,H,00:F0:3A:99,00:0D:8A:80,48:F8:B3:54:43:EB,z.z.z.z,10780,906
2015-02-26 00:00:00 Local3.Info x.x.x.x Feb 26 05:32:56  y.y.y.y 00:0D:8A:80 , 48:F8:B3:54:43:EB DHCP ACK: Valid IP->Valid IP: y.y.y.y
2015-02-26 00:00:00 Local5.Notice   x.x.x.x Feb 26 05:00:11  z.z.z.z AAA: Modulation Change to 16QAM recvd from 00:16:C4:ED

Portanto, a saída no novo arquivo ficaria assim

2015-02-26 00:00:00 Local5.Notice   x.x.x.x Feb 26 05:32:56  z.z.z.z BTS Sending CDR: 067,H,00:F0:3A:99,00:0D:8A:80,48:F8:B3:54:43:EB,z.z.z.z,10780,906
2015-02-26 00:00:00 Local5.Notice   x.x.x.x Feb 26 05:00:11  z.z.z.z AAA: Modulation Change to 16QAM recvd from 00:16:C4:ED

Qualquer ajuda seria muito apreciada! desde já, obrigado

Responder1

Você deve ser capaz de usargrep

grep -F 'z.z.z.z' logfile > results

O argumento -F( --fixed-strings) evita que os separadores de ponto sejam interpretados usando a sintaxe de expressão regular (que corresponderia a 'qualquer caractere'), mas sim como pontos literais.

Responder2

Você pode usar grep ou awk.

grep 'z.z.z.z' your_file

awk tem mais opções

awk '/z.z.z.z/ {print}' your_file

mas o awk pode fazer mais formatação e tem mais opções

verhttps://www.digitalocean.com/community/tutorials/how-to-use-the-awk-language-to-manipulate-text-in-linux

e

http://www.grymoire.com/Unix/Awk.html

para detalhes

Toneladas de outras opções, perl também funcionaria ...

Responder3

Alguém sentiu falta sed? Aqui você vai:

sed -i.bak '/z\.z\.z\.z/!d' file.txt

O arquivo original será copiado como "file.txt.bak" e o arquivo modificado será "file.txt". Se você não quiser fazer backup do arquivo original:

sed -i '/z\.z\.z\.z/!d' file.txt

Se você deseja apenas imprimir a saída em vez de salvá-la:

sed '/z\.z\.z\.z/!d' file.txt

Responder4

Alternativa Perl:

$ perl -lane 'print if /z.z.z.z/'  < input.txt                                                                               
2015-02-26 00:00:00 Local5.Notice   x.x.x.x Feb 26 05:32:56  z.z.z.z BTS Sending CDR: 067,H,00:F0:3A:99,00:0D:8A:80,48:F8:B3:54:43:EB,z.z.z.z,10780,906
2015-02-26 00:00:00 Local5.Notice   x.x.x.x Feb 26 05:00:11  z.z.z.z AAA: Modulation Change to 16QAM recvd from 00:16:C4:ED

informação relacionada