如何使用grep从UFW防火墙日志中提取SRC对应的IPv6地址
正确命令
方案1:使用grep Perl正则直接提取(最简写法)
grep -oP '(?<=SRC=)[0-9a-fA-F:.]+' 你的日志文件名
后续接统计直接管道即可(注意uniq需要先排序才能正确统计所有重复项):
grep -oP '(?<=SRC=)[0-9a-fA-F:.]+' 你的日志文件名 | sort | uniq -c
方案2:兼容普通grep的写法(无需Perl正则支持)
grep -o 'SRC=[0-9a-fA-F:.]*' 你的日志文件名 | cut -d '=' -f 2
之前命令错误原因
^SRC强制匹配行首的SRC,UFW日志中SRC字段不一定在行首,适用范围极窄- 引号位置错误,等于号放在单引号外会被shell提前解析,没有传入grep作为匹配规则
- 匹配范围
[1-9:]漏掉了0、a-f这些IPv6地址允许的十六进制字符,无法匹配合法地址
参数说明
-o:只输出每行中匹配到的内容,不输出整行日志-P:启用Perl兼容正则,支持零宽断言语法(?<=SRC=):正向后顾断言,只匹配SRC=字符串之后的内容,不会把SRC=本身计入输出结果[0-9a-fA-F:.]+:匹配IPv6地址允许的所有合法字符,包含大小写十六进制数、地址分隔冒号、压缩用连续冒号
内容的提问来源于stack exchange,提问作者Ockham
相关产品推荐
相关产品推荐

