Duc*_*uck 4 grep text-processing
我有一个文件,在其他行中包含这样的条目
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=200.250.9.210, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Run Code Online (Sandbox Code Playgroud)
每次找到这样的一行时,我都想提取与 rip 部分关联的 IP,但我想提取至少显示 3 次的 IP。
我正在尝试使用 grep 来做到这一点。
这是我的 grep
more /var/log/maillog-20130217 | grep "auth failed" | grep -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4
][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
Run Code Online (Sandbox Code Playgroud)
此 grep 显示匹配行中的所有 IP
如果我至少有 3 行与该 IP 匹配且只有唯一 IP,我该如何限制此 grep 仅显示 IP?
我是说这个。假设我的日志有这个
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=200.250.9.210, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=200.250.9.210, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=20.20.20.20, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=200.250.9.210, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Run Code Online (Sandbox Code Playgroud)
我想使用 grep 并获得 200.250.9.210,因为我在那里有 3 行带有此 IP 的行,但没有出现一次的 20.20.20.20。
当我运行我的 grep 时,我拥有的是这个
200.250.9.210
200.250.9.210
20.20.20.20
200.250.9.210
Run Code Online (Sandbox Code Playgroud)
或者换句话说,它列出了匹配行中的所有 IP。
谢谢。
sed < mail.log -n 's/.*auth failed.*rip=\([^,]*\).*/\1/p' |
sort |
uniq -c |
awk '$1 >= 3' |
sort -rn
Run Code Online (Sandbox Code Playgroud)
会给你匹配的 IP 地址,它们的出现次数按出现次数排序。