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-- 这将为您提供从第三行到行尾的所有字段。

答案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

不需要依赖\sand\s+当我们可以只允许连续的空白转换为单个空格之后$1 = $2 = ""

谢谢埃德·莫顿

相关内容