![从复杂日志中收集 IP](https://linux22.com/image/586401/%E4%BB%8E%E5%A4%8D%E6%9D%82%E6%97%A5%E5%BF%97%E4%B8%AD%E6%94%B6%E9%9B%86%20IP.png)
我对使用一些更高级的 grep、awk、sed 有疑问。我有一个日志文件,用于专有 MTA,其中包含字符串中的 IP,以 分隔[redacted]^~x.x.x.x^[redacted]
。到目前为止,我所有的 grep、awking 和 sed 都没有取得多大进展。
此日志文件有 331520 行。我的目标是简单地 grep 出 ip,然后使用 sed 执行 for 循环,以 sed 's/$i/redacted'。我附上了一个日志条目的示例。如果你们有任何想法,我将不胜感激。
Jun 4 15:21:52 host.name mta-name: 13388^~88/CC-04671-FCA0DCF4^~D^~<redactedmessageid>^~@^[email protected]^~redacted.hostname^~000.00.000.000^~port^~esmtp^~^~external_routing_nobounce^~0^~0.51^~subjectofmessage^~250 2.6.0 <redactedmessageid> [InternalId=2178458] Queued mail for delivery
答案1
您想用字符串“[redacted]”替换 IP 地址吗?无需在循环中执行grep
then 。为您提供循环并免费“grepping”。sed
sed
sed 's/\^~[[:digit:]]\+\(\.[[:digit:]]\+\)\{3\}/^~[redacted]^~/' logfile
答案2
我搞明白了。更多手册页。对我的grep
命令进行一点修改,使用-o
显示地址列表,使用sort | uniq
,我能够获得列表
grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' log.file | sort -n | uniq