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

linux命令grep的实际应用

grep 是 Linux/Unix 系统中用于文本搜索的超级工具,其核心功能是使用正则表达式匹配文本行并输出结果。下面结合具体场景,展示其强大而实用的应用技巧:


一、基础搜索与过滤

  1. 快速定位文件内容:​

    grep "error" /var/log/syslog        # 查找 syslog 中所有含 "error" 的行
    grep -i "timeout" application.log   # -i 忽略大小写,查找 "timeout"
  2. 统计匹配行数:​

    grep -c "404" access.log            # 统计 access.log 中 404 错误出现的次数

二、高级搜索技巧

  1. 正则表达式匹配:​

    grep -E "[0-9]{3}-[0-9]{4}" data.txt  # 查找形如 "123-4567" 的电话号码
    grep -P "\d{2}:\d{2}:\d{2}" log.txt   # -P 启用 PCRE 匹配时间格式 "HH:MM:SS"
  2. 递归搜索目录:​

    grep -r "functionName" /src         # 递归搜索目录中所有文件
    grep -r --include="*.py" "import" . # 仅搜索 .py 文件中的 "import"
  3. 反向搜索(排除匹配项):​

    grep -v "DEBUG" app.log             # 排除所有含 "DEBUG" 的行(只显示非调试信息)

三、上下文查看(故障排查神器)​

grep -C 3 "crash" system.log        # 显示匹配行及其前后各3行
grep -A 2 "Starting service" log    # 显示匹配行及之后2行
grep -B 1 "Connection closed" log   # 显示匹配行及之前1行

场景示例:​​ 快速查看服务启动失败时的上下文错误信息。


四、进程与命令结合

  1. 过滤命令输出:​

    ps aux | grep "[n]ginx"          # 查找 Nginx 进程([n] 避免匹配自身)
    ifconfig | grep -E "inet [0-9.]+" # 提取所有 IP 地址
  2. 多条件组合搜索:​

    grep "error" log.txt | grep -v "warning"  # 只含 error 不含 warning

五、文件批量处理

  1. 列出匹配文件:​

    grep -rl "deprecated" .          # 搜索当前目录下包含 deprecated 的文件列表
  2. 代码重构辅助:​

    grep -rn "old_function(" .       # 显示旧函数被调用的位置(文件名 + 行号)

六、进阶玩法

  1. 颜色标注匹配项:​

    grep --color=auto "TODO" code.py # 高亮显示 "TODO",便于视觉定位
  2. 只输出匹配部分:​

    echo "Date: 2023-08-01" | grep -o "[0-9-]\+"  # 仅输出 "2023-08-01"
  3. 静默模式(用于脚本判断):​

    if grep -q "success" output.txt; thenecho "✅ Operation succeeded!"
    fi

经典排查场景实战

# 分析 Nginx 日志:筛选某 IP 的 POST 404 请求,显示前3后2行
grep -C '1.2.3.4.*POST.*404' /var/log/nginx/access.log | grep --color -E '404|$'

小贴士:​

  • 善用 | less -R 查看彩色输出(如 grep --color | less -R
  • 复杂正则用 -P (PCRE) 支持更丰富的语法(如 \d, \s
  • 大文件搜索时,可先用 head/grep 组合缩小范围(如 grep -m 1000 ...

掌握这些技巧后,grep 会成为你在日志分析、代码审查、数据清洗等任务中的首选利器!

http://www.dtcms.com/a/302236.html

相关文章:

  • Leetcode——11. 盛最多水的容器
  • kubectl中的yaml配置详解
  • 前段面试题新版
  • 从fork到exit:剖析Linux进程的诞生、消亡机制
  • 零基础部署网站?使用天翼云服务搭建语音听写应用系统
  • C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
  • [机缘参悟-237]:AI人工神经网络与人类的神经网络工作原理的相似性
  • 嵌入式学习(40)-基于STM32F407Hal库的串口DMA空闲中断接收+DMA发送
  • 前端实现银河粒子流动特效的技术原理与实践
  • 物联网与数字孪生:深度协同驱动智能未来 —— 专业规划分析
  • 解析分区、挂载与块设备:Linux 存储管理核心命令详解
  • 关于前端的性能优化
  • Vue 工程化
  • 初识 docker [下] 项目部署
  • 【案例总结】幽灵单据——消失的交货单号
  • 数据库简介
  • layui-vue 入驻 GitCode 平台:让前端开发更简单优雅
  • 【Oracle】ORACLE-ASM安装
  • vue-grid-layout元素交换位置及大小
  • Python Pandas.merge函数解析与实战教程
  • 【数学建模论文学习笔记】基于历史数据的蔬菜类商品定价与补货决策模型
  • Java从入门到精通!第十八天(JDK17安装以及网络编程) 完结篇!!!
  • 7.29 技巧|
  • 【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
  • C# 接口(interface 定义接口的关键字)
  • JVM 垃圾回收机制全景解析:从对象回收到收集算法
  • Spring Boot日志开发实战手册:集成/输出/级别控制/持久化精要
  • MySQL 锁机制 15 连问 · 面试速答版
  • openeuler24.03部署k8s1.32.7集群(一主两从)
  • C primer plus (第六版)第九章 编程练习第6题