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