У меня есть большой текстовый файл, из которого я хочу извлечь строки данных. Я хочу извлечь каждую строку, содержащую IP-адрес, который я могу указать (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
Таким образом, вывод в новом файле будет выглядеть следующим образом:
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
Любая помощь будет оценена по достоинству! Спасибо заранее
решение1
Вы должны уметь пользоватьсяgrep
grep -F 'z.z.z.z' logfile > results
Аргумент -F
( --fixed-strings
) предотвращает интерпретацию разделителей точек с использованием синтаксиса регулярных выражений (который будет соответствовать «любому символу»), а вместо этого интерпретирует их как буквальные точки.
решение2
Вы можете использовать grep или awk.
grep 'z.z.z.z' your_file
У awk больше возможностей
awk '/z.z.z.z/ {print}' your_file
но awk может выполнять больше форматирования и имеет больше опций
и
http://www.grymoire.com/Unix/Awk.html
для подробностей
Множество других вариантов, perl тоже подойдет...
решение3
Кто-нибудь пропустил sed
? Вот:
sed -i.bak '/z\.z\.z\.z/!d' file.txt
Исходный файл будет скопирован как "file.txt.bak", а измененный файл будет "file.txt". Если вы не хотите скопировать исходный файл:
sed -i '/z\.z\.z\.z/!d' file.txt
Если вы просто хотите распечатать вывод, а не сохранить его:
sed '/z\.z\.z\.z/!d' file.txt
решение4
Альтернатива 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