![正则表达式私有 ips 并从日志文件中删除](https://linux22.com/image/143649/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%A7%81%E6%9C%89%20ips%20%E5%B9%B6%E4%BB%8E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4.png)
我有一个很大的 AWS ELB 日志文件,我想从中删除私有 IP,例如:
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'
答案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