我有一个关于使用更高级的grep,awk,sed的问题。 我有一个专有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