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
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