Logging

從復雜的日誌中收集 IP

  • June 24, 2012

我有一個關於使用一些更高級的 grep、awk、sed 的問題。我有一個專有 MTA 的日誌文件,其中包含字元串中的 IP,由[redacted]^~x.x.x.x^[redacted]. 到目前為止,我所有的 grepping、awking 和 sedding 都沒有讓我走得很遠。

此日誌文件中有 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>^~@^~redacteduser@domain.tld^~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    

是否要將 IP 地址替換為字元串“

$$ redacted $$“?沒有必要grepsed循環中。sed給你一個循環和免費的“grepping”。

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

我想通了。更多手冊頁。grep用 a 對我的命令稍作修改,向我-o顯示了地址列表,使用sort | uniq,我能夠得到一個列表

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

引用自:https://serverfault.com/questions/395932