大きなテキスト ファイルがあり、そこからデータの行を抽出したいのですが、指定できる 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