正規表現プライベートIPを使用してログファイルから削除する

正規表現プライベートIPを使用してログファイルから削除する

プライベートIPを削除する大規模なAWS ELBログファイルがあります。たとえば、次のようになります。

2018-06-03T23:59:57.000Z 66.249.66.129,10.0.1.81 [03/Jun/2018:23:59:57 +0000] "GET http://www.domain0.com/latest-news/dubai-duty-free-sales-rise-11-q1-12-04-2018/ HTTP/1.1" 200 16669 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
2018-06-03T23:59:58.000Z 82.113.167.2,10.0.1.132 [03/Jun/2018:23:59:58 +0000] "GET http://www.domain3.com/feed HTTP/1.1" 200 17144 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"
2018-06-03T23:59:58.000Z 192.243.55.95,10.0.1.81 [03/Jun/2018:23:59:58 +0000] "GET http://www.domain1.com/feed/ HTTP/1.1" 200 18532 "https://www.domain1.com/feed" "Mozilla/5.0 (compatible; SemrushBot/1.0~bm; +http://www.semrush.com/bot.html)"
2018-06-03T23:59:58.000Z 207.46.13.236,10.0.1.81 [03/Jun/2018:23:59:58 +0000] "GET http://www.domain.com/blogs/gadget-master/general/brightsparks-trophies-make-mark-2017-05/https/blogs/distribution-world/page/9/ HTTP/1.1" 200 16339 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
2018-06-03T23:59:59.000Z 62.210.215.100,10.0.1.81 [03/Jun/2018:23:59:59 +0000] "GET http://www.domain.com/electro-ramblings/tag/blog/feed/ HTTP/1.1" 200 1664 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"`, "\n")

正規表現を教えてください

しかし、実行してみると

cat logs.txt | sed '/T/s/T/:/1' | sed -E 's/,10.0/ /g'

しかし、これは単に返されます

2018-06-03:23:59:57.000Z 66.249.66.129 .1.81 
...

,sedで正規表現を使用してファイルからプライベートIPを削除する方法は?

どんなアドバイスも本当にありがとうございます。

答え1

要件は「プライベート」IP(10 ...)を削除することであるため、ender.qaによって提供される正規表現は次のように洗練されます。

sed -E '/T/s/T/:/1; s/,10\.([0-9]{1,3}.){2}[0-9]{1,3}//g' file

あるいは、IPにスペースが含まれていないため、短くなります。

sed -E '/T/s/T/:/1; s/,10\.[^ ]*//g' file

答え2

「前のデータ」が欲しいようです。

2018-06-03T23:59:57.000Z 66.249.66.129,10.0.1.81 [03/Jun/2018:23:59:57 +0000] ...

「以降のデータ」になります。

2018-06-03:23:59:57.000Z 66.249.66.129 [03/Jun/2018:23:59:57 +0000] ...

そうですか?

次の場合:

cat logs.txt | sed '/T/s/T/:/1' | sed -e 's/,.*\[//g'

また、以下は必要ありませんcat

sed '/T/s/T/:/1' logs.txt | sed -e 's/,.*\[/ \[/g'

デフォルトでは、エスケープする必要があるカンマ(、)と左角括弧([)の間のすべての文字(.*)を削除しようとしています。

IPアドレスだけを削除したい場合

sed '/T/s/T/:/1' logs.txt | sed -re 's/,([0-9]{1,3}\.){3}[0-9]{1,3}//g'

または

sed '/T/s/T/:/1' logs.txt | sed -e 's/,\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}//g'

引用:https://stackoverflow.com/a/14928879/4635198

答え3

いいえかなり何を求めていますか?しかし、これが見えます。使い方grepcidrフィルタリングする(削除する)ワイヤーファイルには個人アドレス範囲10.0.0.0-10.255.255.255のIPアドレスが含まれていますfile

grepcidr -v '10.0.0.0-10.255.255.255' file

同じですが、CIDRネットワークブロック構文を使用します。

grepcidr -v '10.0.0.0/8' file

関連情報