Shell 日志处理:切片与过滤实战

针对"熟悉 shell 基本语法,能对 log 日志返回的数据进行切片及过滤"这一技能点,下面系统梳理核心命令和典型用法。

一、日志切片(按行/字段/时间)

  1. 按行切片

head / tail

head -n 100 app.log # 前100行
tail -n 100 app.log # 后100行
tail -n +50 app.log # 从第50行开始到末尾
tail -f app.log # 实时跟踪

sed 按行号区间

sed -n '100,200p' app.log # 第100-200行
sed -n '1~10p' app.log # 每10行取一行

awk 按行号条件

awk 'NR>=100 && NR<=200' app.log
awk 'NR%100==0' app.log # 每100行取一行

  1. 按时间切片

awk 提取指定时间段(日志格式:2024-01-15 10:23:45 ...)

awk '$1" "$2 >= "2024-01-15 10:00:00" && $1" "$2 <= "2024-01-15 11:00:00"' app.log

sed 按时间起止

sed -n '/2024-01-15 10:00:00/,/2024-01-15 11:00:00/p' app.log

  1. 按字段切片

cut:按字符/分隔符

cut -c1-20 app.log # 前20个字符
cut -d' ' -f1,4 app.log # 空格分隔,取第1、4列
cut -d' ' -f2- app.log # 从第2列到末尾

awk:按字段

awk '{print $1, $4}' app.log
awk -F':' '{print $1}' app.log # 指定分隔符

二、日志过滤

  1. 行过滤
    grep "ERROR" app.log # 包含 ERROR
    grep -i "error" app.log # 忽略大小写
    grep -v "DEBUG" app.log # 排除 DEBUG
    grep -E "ERROR|WARN" app.log # 正则多条件
    grep -c "ERROR" app.log # 统计行数
    grep -n "ERROR" app.log # 显示行号
    grep -A2 -B2 "ERROR" app.log # 上下文各2行
  2. 字段条件过滤(awk)

第5列状态码 >= 500

awk '$5 >= 500' access.log

某字段等于特定值

awk '$3 == "ERROR"' app.log

多条件组合

awk '$3=="ERROR" && $6>1000' app.log

按字段去重统计

awk '{print $1}' app.log | sort | uniq -c | sort -rn
3. 排除重复/取唯一
sort app.log | uniq # 去重(需先排序)
sort -u app.log # 排序并去重
uniq -c app.log | sort -rn | head # Top N 统计

三、典型组合场景
场景1:统计某时间段内的 ERROR 数量
sed -n '/2024-01-15 10:00/,/2024-01-15 11:00/p' app.log | grep -c "ERROR"

场景2:提取访问日志中响应时间 > 1s 的 URL
awk '$NF > 1.0 {print $7}' access.log

场景3:按小时统计请求量
awk '{print substr($4,2,14)}' access.log | sort | uniq -c

场景4:过滤指定 IP 的 5xx 错误并取前20条
grep "192.168.1.10" access.log | awk '$9 ~ /^5/' | head -20

场景5:实时监控含关键字的新日志
tail -f app.log | grep --line-buffered "Exception"

四、高频命令速查表
image

五、实战小技巧
--line-buffered:管道中 grep 默认缓冲,实时日志需加此参数。
$NF:awk 中表示最后一列,适合不定长日志。
FNR vs NR:处理多文件时 FNR 是当前文件行号,NR 是总行号。
-o:grep -o 只输出匹配部分,适合提取特定模式。
tac:倒序输出,配合 head 可快速取"最后N条中符合条件的"。

posted @ 2026-11-13 15:25  endy0819  阅读(2)  评论(0)    收藏  举报