目前我在Linux上使用此命令:
grep Ban /var/log/fail2ban.log | grep -v’恢复禁令’| sed’s / \ s \ s * / / g’| cut -d“” - f8 |排序| uniq -c | sort -t’’ - n -b日志文件看起来像……
((Get-Content "fail2ban.log") -cmatch "(?<!Restore )Ban" | Select-String -Pattern "[0-9.*]+$" -AllMatches).matches.value | Group-Object | foreach {"$($_.count) $($_.name)"}
这里的Get-Content抓取了fail2ban.log文件的每一行。 -cmatch运算符正在执行区分大小写的正则表达式匹配。正则表达式模式查找字符串Ban,后面是字符串Restore的负面外观。 Select-String正在查找集合中具有字符的每行末尾的正则表达式模式(0123456789. *)。 matches.value属性仅输出正则表达式中匹配的字符串。 Group-Object将每个相同匹配的值组作为属性Name并添加count属性。由于OP是捕获计数,我决定使用Group-Object轻松获得它。 foreach只是进行格式化以匹配OP的输出表示。