当前位置: 首页 > 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.lryc.cn/news/603059.html

相关文章:

  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • 1.vue体验
  • Android 媒体播放开发完全指南
  • Ansible提权sudo后执行报错
  • 电脑开机不显示网卡的原因
  • selenium 特殊场景处理
  • 刘润探展科大讯飞WAIC,讯飞医疗AI该咋看?
  • CSP-J 2022_第三题逻辑表达式
  • 技术工具箱 |五、一个避免头文件重复引用的 Python 脚本
  • 嵌入式Linux:注册线程清理处理函数
  • Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:硬件编程原理、基于SDK库函数编程、软件固化
  • 第五章:进入Redis的Hash核心
  • 设计模式实战:自定义SpringIOC(亲手实践)
  • 深度研究——OpenAI Researcher Agent(使用OpenAI Agents SDK)
  • EAP(基于事件的异步编程模式)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘papermill’问题
  • 时间数字转换器TDC的FPGA方案及核心代码
  • 将 NI Ettus USRP X410 的文件系统恢复出厂设置
  • C#:基于 EF Core Expression 的高性能动态查询构建实战 —— 面向大数据量环境的查询优化方案(全是干货,建议收藏)
  • Day22-二叉树的迭代遍历
  • 代码随想录Day32:动态规划(斐波那契数、爬楼梯、使用最小花费爬楼梯)
  • 10:00开始面试,10:06就出来了,问的问题有点变态。。。
  • Jmeter 性能测试监控之ServerAgent
  • AT89C 系列单片机知识点总结
  • 基于VHDL的神经网络加速器设计实战
  • 基于亮数据 MCP 的 Trae 智能体,让规模化 Google 数据实时分析触手可及
  • DBAPI的SQL实现模糊查询的3种方案
  • git相关操作记录
  • C++初学者4——标准数据类型
  • Day 24:元组与os模块