从复杂的日志中收集IP

我有一个关于使用更高级的grepawksed的问题。 我有一个专有MTA的日志文件,它包含一个string中的IP,由[redacted]^~xxxx^[redacted]分隔。 到目前为止,我所有的gre,,aw,和se has都没有让我走得很远。

该日志文件中有331520行。 我的目标是简单地刷出ip,然后用sed做一个for循环,以sed的/ $ 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 

你想用string“[redacted]”replaceIP地址吗? 没有必要grep sed循环。 sed给你一个循环和免费的“grepping”。

 sed 's/\^~[[:digit:]]\+\(\.[[:digit:]]\+\)\{3\}/^~[redacted]^~/' logfile 

我明白了这一点。 更多的人页面。 用-o稍微修改我的grep命令,向我显示了一个地址列表,用sort | uniq sort | uniq ,我能够得到一个清单

 grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' log.file | sort -n | uniq