私は以下を持っています:
cat /var/log/example.log | cut -d ' ' -f 3,4,5,6 | sort -u | uniq
結果には数千の行がありますが、実際のアクティビティを表示するために切り取りたい場合は、IPアドレスを除外/無視する必要があります。
したがって、ログには次の履歴があります。
2021-12-30 19:46:44 Invalid heartbeat from X.X.X.X
2021-12-30 19:46:44 X.X.X.X sent a malformed request
2021-12-30 19:46:44 Login from X.X.X.X failed due to bad username
2021-12-30 19:46:44 Failed login from this IP X.X.X.X
数万のレコードがあります。活動をどのように取得しますか?
Invalid heartbeat from
sent a malformed request
Login from failed due to bad username
Failed login from this IP
ありがとう
答え1
sed
以下を使用して、ソートする前にIPアドレスを削除できます。
cut -d ' ' -f 3- /var/log/example.log | sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}//g' | sort -u
cut -f 3-
- 3行目から行末までのすべてのフィールドが提供されます。
答え2
解決策が必要な場合はawk
ここにあります。
awk '
{
for (i = 1; i <= NF - 2; i++) {
$i = $(i + 2)
}
NF -= 2
gsub(/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/, "", $0)
print
}
' /var/log/example.log | sort -u
答え3
明らかに、これはうまくいきます。
awk '{ gsub(/[0-9]{1,3}(\.[0-9]{1,3}){3}/, ""); $1 = $2 = "";
gsub(/^ +| +$/, "") } !seen[$0]++' /var/log/example.log
依存する必要はなく、\s
連続し\s+
たスペースを単一のスペースにのみ変換できる場合です$1 = $2 = ""
。
ありがとうエドモートン。