当前位置: 首页 > news >正文

查找日志文件中​​最后一次出现某个关键词的上下 20 行​​

​方法 1:使用 grep + tac + sed(推荐)​

tac logfile | grep -m1 -A20 -B20 "your_keyword" | tac
  • ​原理​​:
    • tac 反向读取日志(从最后一行开始)。
    • grep -m1 只匹配​​第一次​​出现的关键词(即原日志的最后一次)。
    • -A20 -B20 显示匹配行的​​前后 20 行​​。
    • 再次 tac 恢复原始顺序。

​示例​​:

tac /var/log/nginx/error.log | grep -m1 -A20 -B20 "error" | tac

​方法 2:使用 awk 记录匹配行号并提取​

awk '/your_keyword/ {last_match=NR} END {if (last_match) print last_match}' logfile | xargs -I{} awk 'NR>={}-20 && NR<={}+20' logfile
  • ​原理​​:
    • awk 记录最后一次匹配的行号 last_match
    • xargs 传递行号,再次用 awk 提取 last_match ± 20 行。

​示例​​:

awk '/error/ {last_match=NR} END {if (last_match) print last_match}' /var/log/syslog | xargs -I{} awk 'NR>={}-20 && NR<={}+20' /var/log/syslog

​方法 3:使用 sed 直接提取(适合小文件)​

line=$(grep -n "your_keyword" logfile | tail -1 | cut -d: -f1) && \
sed -n "$((line>20 ? line-20 : 1)),$((line+20))p" logfile
  • ​原理​​:
    • grep -n 获取所有匹配行号,tail -1 取最后一次。
    • sed -n "a,bp" 打印从 ab 的行(自动处理边界情况)。

​示例​​:

line=$(grep -n "failed" app.log | tail -1 | cut -d: -f1) && \
sed -n "$((line>20 ? line-20 : 1)),$((line+20))p" app.log

​方法 4:使用 less 交互式查找(适合手动检查)​

less +?"your_keyword" logfile
  • ​操作步骤​​:
    1. n 跳转到​​最后一个匹配项​​。
    2. -20j 向上滚动 20 行,+20j 向下滚动 20 行。

​注意事项​

  1. ​大文件优化​​:
    如果日志文件很大(如 GB 级),优先使用 tacawk 方法,避免全文件扫描。
  2. ​边界处理​​:
    如果匹配行靠近文件开头(行号 <20),上述命令会自动调整范围。
  3. ​时间戳辅助​​:
    如果日志带时间戳,可以先定位时间范围再过滤:
    grep -A20 -B20 "your_keyword" logfile | tail -41  # 近似最后匹配的±20行

​终极方案:结构化日志(如 JSON)​

如果日志是 JSON 格式,用 jq 更精准:

tac log.json | jq -c 'select(.msg | contains("error"))' | head -1 | jq . | tac

选择最适合你日志格式的方法即可!

http://www.xdnf.cn/news/946855.html

相关文章:

  • ZYNQ学习记录FPGA(二)Verilog语言
  • matlab自控仿真【第一弹】❀传递函数和输出时域表达式
  • VAS1086Q 奇力科技线性芯片车规用品LED驱动芯片
  • 鸟巢邂逅 3D 全景漫游,一场科技与建筑的梦幻交织​
  • 成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
  • 【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
  • 佰力博科技与您探讨热释电测量的几种方法
  • 边缘计算设备全解析:边缘盒子在各大行业的落地应用场景
  • 如何使用 Ansible 在 Ubuntu 24.04 上安装和设置 LNMP
  • Web中间件--tomcat学习
  • Tomcat 安装和配置
  • tomcat核心组件
  • tomcat组件架构设计
  • ubuntu服务器上极简部署odoo18
  • Spring是如何解决Bean的循环依赖:三级缓存机制
  • 一款用于react-native监听app[AppState]前后台的自定义Hooks开源插件
  • 基于 PyTorch 和 OpenCV 的实时表情检测系统
  • 企业如何增强终端安全?
  • 前端面试题 微信小程序兼容性问题与组件适配策略
  • 融智学本体论体系全景图
  • 西电计组第五章-指令系统
  • VmWare Ubuntu 16.04 搭建DPDK 19.08.2
  • 【JavaAPI搜索引擎】自动化测试报告
  • 【触想智能】工业平板电脑在无人巡检设备上的应用优势
  • 【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
  • Nosql之Redis集群
  • 突破原生整数范围限制:C++高精度乘法算法模板的实现与优化
  • 信号的诞生:Linux进程信号的启示与奥秘
  • Spring Boot 与 Kafka 的深度集成实践(一)
  • AI编程--插件对比分析:CodeRider、GitHub Copilot及其他