# 日志文件内容提取方法 ## 一、基础文本处理工具 ### 1. grep(关键词过滤) bash grep "ERROR" app.log # 查找包含ERROR的行 grep -i "warning" app.log # 忽略大小写查找 grep -A 3 "Exception" app.log # 显示匹配行及其后3行 ### 2. awk(列提取) bash awk '/2023-10-01/ {print $1, $4}' access.log # 提取特定日期的IP和状态码 awk -F ',' '{print $2}' csv_log.log # 指定逗号分隔符 ### 3. sed(模式匹配) bash sed -n '/2023-10-01 14:00:00/,/2023-10-01 15:00:00/p' system.log # 提取时间区间 sed '/DEBUG/d' app.log # 删除调试信息 ## 二、结构化日志处理 ### 1. JSON格式日志 bash jq '.timestamp + " " + .message' app.json.log # 使用jq工具 ### 2. 多文件处理 bash grep -rHn "Timeout" /var/log/ # 递归搜索目录 find /logs -name "*.log" -exec grep "404" {} + ## 三、Python脚本示例 python import re pattern = r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*?ERROR.*?(\w+Exception)' with open('app.log') as f: for line in f: if match := re.search(pattern, line): print(f"[{match.group(1)}] {line.strip()}") ## 四、高级工具推荐 1. `rg` (ripgrep):更快的grep替代品 2. `logparser`:Windows日志分析工具 3. `GoAccess`:实时Web日志分析器 ## 五、注意事项 1. 处理大文件时建议使用流式读取 2. 注意日志文件的字符编码(可使用 `iconv` 转换) 3. 敏感信息过滤:`sed '/password/d' config.log` 4. 使用 `less +G -N` 查看带行号的文件 ## 六、可视化分析 bash cat access.log | awk '{print $9}' | sort | uniq -c | sort -nr # 状态码统计 > 根据日志格式灵活组合工具,复杂场景建议使用ELK(Elasticsearch+Logstash+Kibana)等专业日志系统