要排除已关闭状态的TCP长连接日志,需先识别日志中“连接已关闭”的关键词(如CLOSED、FIN、RST等),再用grep -v反向过滤;可结合awk、ss等工具辅助筛选活跃连接,并注意正则边界与转义。

要排除已关闭状态的 TCP 长连接日志,关键是识别日志中标识“连接已关闭”的字段或模式,然后用 grep -v 反向过滤。
确认日志中“已关闭”的典型标识
不同服务日志格式不同,常见关闭状态关键词包括:
- CLOSED、FIN、RST、TIME_WAIT、CLOSE_WAIT
- 或更业务化的词如 connection closed、disconnected、shutdown、terminated
建议先用 head 或 grep -i "close\|fin\|rst" 快速采样,确认实际日志中使用的准确字符串。
使用 grep -v 排除关闭状态行
一旦确定关键词,直接用 -v(invert match)过滤掉含该模式的行:
- 排除所有含
CLOSED的行:grep -v "CLOSED" access.log - 忽略大小写,排除多种关闭关键词:
grep -vi "closed\|fin\|rst\|time_wait" access.log - 匹配整词避免误杀(如防止把
unclosed当成closed):grep -viw "closed\|fin\|rst"
结合其他工具精准过滤长连接(可选增强)
单纯排除“关闭”不一定等于保留“活跃长连接”,还需辅助判断。例如:
- 若日志含连接持续时间字段(如
duration=120s),可先提取再筛选:grep "duration=" log | awk '$NF > 60' | grep -v "CLOSED" - 若用
ss或netstat输出,状态为ESTABLISHED才算活跃:ss -tn | grep ":80" | grep "ESTAB"
注意正则边界与转义
如果关键词含特殊字符(如 TIME_WAIT 中的下划线),一般无需转义;但若用扩展正则(grep -E),且模式含 .、?、+ 等,需反斜杠转义。例如排除 state: closed.(末尾有英文句点):grep -v "state: closed\."

















