Ayuda de secuencias de comandos para filtrar una dirección IP

Ayuda de secuencias de comandos para filtrar una dirección IP

Tengo un archivo de texto grande del que quiero extraer líneas de datos, quiero extraer cada línea que contiene una dirección IP que puedo 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

Entonces la salida en el nuevo archivo se vería así

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

¡Cualquier ayuda sería muy apreciada! gracias de antemano

Respuesta1

Deberías poder utilizargrep

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

El argumento -F( --fixed-strings) evita que los separadores de puntos se interpreten utilizando la sintaxis de expresión regular (que coincidiría con "cualquier carácter") sino como puntos literales.

Respuesta2

Puedes usar grep o awk.

grep 'z.z.z.z' your_file

awk tiene más opciones

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

pero awk puede formatear más y tiene más opciones

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

y

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

para detalles

Toneladas de otras opciones, Perl también funcionaría...

Respuesta3

¿Alguien se perdió sed? Aquí tienes:

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

Se realizará una copia de seguridad del archivo original como "file.txt.bak" y el archivo modificado será "file.txt". Si no desea realizar una copia de seguridad del archivo original:

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

Si solo desea imprimir el resultado en lugar de guardarlo:

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

Respuesta4

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

información relacionada