# 日志文件内容提取方法
## 一、基础文本处理工具
### 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)等专业日志系统