uniq - IPアドレスを無視する方法?

uniq - IPアドレスを無視する方法?

私は以下を持っています:

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 = ""

ありがとうエドモートン

関連情報