Shell脚本中grep工具的使用

Written by

in

文章目录
  • 在 Linux/Unix 系统中,grep 是一个非常强大且常用的文本搜索工具,它可以帮助我们快速从文件或标准输入中查找匹配特定模式的内容。 无论是查看日志、调试脚本,还是进行自动化数据提取,grep 都扮演着至关重要的角色。 本文将带你全面了解 grep 工具的使用方式,包括: ✅ grep 的基本语法与常用参数✅ 正则表达式的使用技巧✅ grep 在 Shell 脚本中的实战应用✅ 与其他文本处理命令的联合使用✅ 实际开发中的常见问题与优化建议 并通过完整的代码示例帮助你快速上手并熟练掌握 grep 的各种高级用法。
  • grep 是一个用于 全局搜索正则表达式打印(Global Regular Expression Print) 的命令行工具。 简单来说,它可以: 搜索指定字符串 匹配正则表达式 从文件、管道或标准输入中筛选出符合条件的行
  • grep [选项] ‘搜索模式’ 文件列表
  • 技巧 说明 ✅ 使用 -q 判断匹配 避免输出干扰,适用于脚本逻辑判断 ✅ 使用 -o 提取匹配部分 仅输出匹配到的内容 ✅ 使用 -h 不输出文件名 适用于多文件搜索时简化输出 ✅ 使用 ^ 和 $ 定位行首/行尾 如 ^start 表示以 start 开头的行 ✅ 使用 [] 匹配字符集合 如 [0-9] 表示任意数字 ✅ 使用 b 匹配单词边界 防止误匹配如 cat 和 category ✅ 使用 -r 递归搜索目录 快速查找整个项目中的关键词
  • 问题 原因 解决方案 没有输出结果 关键词拼写错误或不存在 检查拼写、尝试 -i 忽略大小写 匹配范围过大 模式太宽泛 使用正则表达式限制匹配规则 grep 找不到文件 路径错误或权限不足 检查路径、使用 sudo 多文件输出显示文件名 默认显示文件名 添加 -h 隐藏文件名 想要提取字段而不是整行 未结合 cut 或 awk 使用 awk 或 cut 提取所需字段
  • 参数 功能 -i 忽略大小写 -v 反向匹配 -n 显示行号 -c 统计匹配行数 -l 只显示文件名 -r 递归搜索 -E 支持扩展正则表达式 -A N 输出匹配行后 N 行 -B N 输出匹配行前 N 行 -C N 输出匹配行前后各 N 行 -q 静默模式,仅返回状态码 -o 仅输出匹配内容
  • 到此这篇关于Shell脚本中grep工具的使用的文章就介绍到这了,更多相关Shell grep工具内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Linux下shell基本命令之grep用法及示例小结 shell正则表达式、grep命令和sed命令举例详解 Shell查找命令find和grep的具体使用 linux shell中Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字) shell脚本之正则表达式、grep、sed、awk 详解 Shell中的grep命令 Shell正则表达式之grep、sed、awk实操笔记 shell grep 查找进程的小技巧
  • 目录
    • 一、前言
    • 二、什么是 grep?
      • ✅ 示例:基础用法
    • 三、grep 基础语法
      • ✅ 常用选项说明:
    • 四、grep 使用示例
      • ✅ 示例1:忽略大小写搜索
      • ✅ 示例2:反向匹配
      • ✅ 示例3:统计匹配行数
      • ✅ 示例4:递归搜索目录
      • ✅ 示例5:结合正则表达式
    • 五、grep 在 Shell 脚本中的应用
      • ✅ 示例1:判断某一行是否存在
      • ✅ 示例2:获取匹配行数
      • ✅ 示例3:结合while read循环处理
      • ✅ 示例4:获取匹配内容并赋值变量
    • 六、grep 与 sed/awk 的配合使用
      • ✅ 示例:提取 IP 地址(grep + awk)
      • ✅ 示例:替换匹配内容(grep + sed)
    • 七、grep 使用技巧总结
      • 八、grep 实战案例汇总
        • ✅ 案例1:查找日志中包含关键字的行及上下文
        • ✅ 案例2:统计访问次数最多的 IP
        • ✅ 案例3:找出未被注释的配置项
      • 九、常见问题与解决方法
        • 十、总结对比表:grep 常用参数一览
          • 十一、结语

            在 Linux/Unix 系统中,grep 是一个非常强大且常用的文本搜索工具,它可以帮助我们快速从文件或标准输入中查找匹配特定模式的内容。

            无论是查看日志、调试脚本,还是进行自动化数据提取,grep 都扮演着至关重要的角色。

            本文将带你全面了解 grep 工具的使用方式,包括:

            ✅ grep 的基本语法与常用参数
            ✅ 正则表达式的使用技巧
            ✅ grep 在 Shell 脚本中的实战应用
            ✅ 与其他文本处理命令的联合使用
            ✅ 实际开发中的常见问题与优化建议

            并通过完整的代码示例帮助你快速上手并熟练掌握 grep 的各种高级用法。

            grep 是一个用于 全局搜索正则表达式打印(Global Regular Expression Print) 的命令行工具。

            简单来说,它可以:

            • 搜索指定字符串
            • 匹配正则表达式
            • 从文件、管道或标准输入中筛选出符合条件的行

            grep "hello" file.txt

            该命令会输出 file.txt 中包含字符串 "hello" 的所有行。

            grep [选项] '搜索模式' 文件列表

            参数 描述
            -i 忽略大小写
            -v 反向匹配,输出不包含匹配项的行
            -n 显示匹配行的行号
            -c 统计匹配的行数
            -l 只显示包含匹配项的文件名
            -r 递归搜索目录下的所有文件
            -E 启用扩展正则表达式
            -A N 输出匹配行后 N 行
            -B N 输出匹配行前 N 行
            -C N 输出匹配行前后各 N 行

            grep -i "hello" file.txt

            匹配 helloHELLOHello 等。

            grep -v "error" log.txt

            输出所有 不含 error 的行

            grep -c "success" result.log

            输出匹配 "success" 的总行数。

            grep -r "TODO" ./src/

            递归搜索 src 目录下所有包含 "TODO" 的文件。

            grep -E '^root' /etc/passwd

            输出以 root 开头的行(如 root 用户信息)。

            if grep -q "pattern" file.txt; then
                echo "匹配成功"
            else
                echo "未找到匹配内容"
            fi

            -q 参数表示静默模式,不输出任何内容,只返回状态码。

            count=$(grep -c "error" logs/*.log)
            echo "发现 $count 个错误"

            grep "warning" /var/log/syslog | while read line; do
                echo "警告: $line"
            done

            ip=$(grep "IP=" config.ini | cut -d'=' -f2)
            echo "服务器IP为:$ip"

            grep -oE '[0-9]+.[0-9]+.[0-9]+.[0-9]+' access.log | sort | uniq

            提取日志文件中所有的 IP 地址,并去重排序。

            grep "old_text" file.txt | sed 's/old_text/new_text/g'

            技巧 说明
            ✅ 使用 -q 判断匹配 避免输出干扰,适用于脚本逻辑判断
            ✅ 使用 -o 提取匹配部分 仅输出匹配到的内容
            ✅ 使用 -h 不输出文件名 适用于多文件搜索时简化输出
            ✅ 使用 ^ 和 $ 定位行首/行尾 如 ^start 表示以 start 开头的行
            ✅ 使用 [] 匹配字符集合 如 [0-9] 表示任意数字
            ✅ 使用 b 匹配单词边界 防止误匹配如 cat 和 category
            ✅ 使用 -r 递归搜索目录 快速查找整个项目中的关键词

            grep -C 2 "ERROR" app.log

            输出匹配 "ERROR" 的行及其前后两行内容,便于定位上下文。

            grep -oE '[0-9]+.[0-9]+.[0-9]+.[0-9]+' access.log | sort | uniq -c | sort -nr | head -n 10

            输出访问次数最多的前 10 个 IP。

            grep -v '^#' config.conf | grep -v '^$'

            排除以 # 开头的注释行和空行。

            问题 原因 解决方案
            没有输出结果 关键词拼写错误或不存在 检查拼写、尝试 -i 忽略大小写
            匹配范围过大 模式太宽泛 使用正则表达式限制匹配规则
            grep 找不到文件 路径错误或权限不足 检查路径、使用 sudo
            多文件输出显示文件名 默认显示文件名 添加 -h 隐藏文件名
            想要提取字段而不是整行 未结合 cut 或 awk 使用 awk 或 cut 提取所需字段

            参数 功能
            -i 忽略大小写
            -v 反向匹配
            -n 显示行号
            -c 统计匹配行数
            -l 只显示文件名
            -r 递归搜索
            -E 支持扩展正则表达式
            -A N 输出匹配行后 N 行
            -B N 输出匹配行前 N 行
            -C N 输出匹配行前后各 N 行
            -q 静默模式,仅返回状态码
            -o 仅输出匹配内容

            到此这篇关于Shell脚本中grep工具的使用的文章就介绍到这了,更多相关Shell grep工具内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

            您可能感兴趣的文章:

            • Linux下shell基本命令之grep用法及示例小结
            • shell正则表达式、grep命令和sed命令举例详解
            • Shell查找命令find和grep的具体使用
            • linux shell中Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)
            • shell脚本之正则表达式、grep、sed、awk
            • 详解 Shell中的grep命令
            • Shell正则表达式之grep、sed、awk实操笔记
            • shell grep 查找进程的小技巧

            站内搜索