非标准日志格式下提取转换IP地址的正则表达式需求
提取并转换IP格式的方法
用 sed 命令快速处理
直接通过正则匹配替换,一步完成提取和格式转换:
echo '{"path":"/var/log/auth.log","message":"Jul 24 08:03:34 ip-192-168-13-129 sshd[32258]: Disconnected from user ubuntu 192.168.13.199 port 49540"}' | sed -E 's/.*ip-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+).*/\1.\2.\3.\4/'
原理:正则捕获ip-后的四段数字,再用点号拼接成标准IP格式。
用 awk 命令处理
如果习惯用awk,可通过分隔符拆分内容:
echo '{"path":"/var/log/auth.log","message":"Jul 24 08:03:34 ip-192-168-13-129 sshd[32258]: Disconnected from user ubuntu 192.168.13.199 port 49540"}' | awk -F'ip-|sshd' '{split($2,a,"-"); print a[1]"."a[2]"."a[3]"."a[4]}'
原理:先以ip-和sshd为分隔符截取目标段,再用-拆分四段数字,最后拼接成标准IP。
Python 脚本批量处理
如果需要处理大量日志,用脚本更灵活:
import re log_line = '{"path":"/var/log/auth.log","message":"Jul 24 08:03:34 ip-192-168-13-129 sshd[32258]: Disconnected from user ubuntu 192.168.13.199 port 49540"}' ip_match = re.search(r'ip-(\d+)-(\d+)-(\d+)-(\d+)', log_line) if ip_match: standard_ip = f"{ip_match.group(1)}.{ip_match.group(2)}.{ip_match.group(3)}.{ip_match.group(4)}" print(standard_ip)
原理:用正则精准匹配ip-开头的IP段,通过分组提取数字后拼接成标准格式。
内容的提问来源于stack exchange,提问作者Jimmy D
相关产品推荐
相关产品推荐

