Linux grep与正则表达式示例代码

2026-07-09编程代码107819

grep是Linux中用于处理文件的工具之一,grep搜索输入文件,查找与正则表达式匹配的行,并将每个匹配的行标准输出,这篇文章主要介绍了Linux grep与正则表达式的相关资料,需要的朋友可以参考下

目录
  • 前言
  • 一、基本用法
    • 1. 基础搜索格式
    • 2. 常用选项
  • 二、正则表达式元字符详解
    • 1. 基本匹配
    • 2. 数量限定
    • 3. 位置锚定
    • 4. 分组与或
  • 三、实用示例
    • 1. 基础搜索
    • 2. 复杂正则匹配
    • 3. 上下文显示
    • 4. 递归搜索
  • 四、性能优化技巧
    • 六、常见问题解决
      • 总结

        前言

        grep (Global Regular Expression Print) 是 Linux 中最强大的文本搜索工具,配合正则表达式可以实现复杂的文本匹配。

        一、基本用法

        1. 基础搜索格式

        grep [选项] "模式" 文件名

        2. 常用选项

        选项 说明
        -i 忽略大小写
        -v 反向匹配(显示不匹配的行)
        -n 显示行号
        -c 统计匹配行数
        -l 只显示包含匹配项的文件名
        -L 显示不包含匹配项的文件名
        -r/-R 递归搜索目录
        -w 全词匹配
        -A num 显示匹配行及后面num行
        -B num 显示匹配行及前面num行
        -C num 显示匹配行及前后各num行

        二、正则表达式元字符详解

        1. 基本匹配

        模式 匹配内容
        . 任意单个字符
        [abc] a、b或c
        [^abc] 非a、b、c的字符
        [a-z] a到z任意小写字母
        \w 单词字符(字母、数字、下划线)
        \W 非单词字符
        \s 空白字符(空格、制表符等)
        \S 非空白字符
        \d 数字([0-9])
        \D 非数字

        2. 数量限定

        模式 匹配次数
        * 0次或多次
        + 1次或多次(ERE/PCRE)
        ? 0次或1次
        {n} 恰好n次
        {n,} 至少n次
        {n,m} n到m次

        3. 位置锚定

        模式 匹配位置
        ^ 行首
        $ 行尾
        \< 单词开头
        \> 单词结尾
        \b 单词边界

        4. 分组与或

        模式 功能
        (pattern) 分组捕获
        (?:pattern) 非捕获分组
        `a b` 匹配a或b

        三、实用示例

        1. 基础搜索

        # 搜索包含"error"的行(区分大小写)
        grep "error" log.txt
        
        # 忽略大小写搜索
        grep -i "error" log.txt
        
        # 统计"warning"出现次数
        grep -c "warning" *.log

        2. 复杂正则匹配

        # 搜索包含"error"的行(区分大小写)
        grep "error" log.txt
        # 忽略大小写搜索
        grep -i "error" log.txt
        # 统计"warning"出现次数
        grep -c "warning" *.log

        3. 上下文显示

        # 显示匹配行及前后2行
        grep -C 2 "critical error" system.log
        # 显示匹配行之后的5行
        grep -A 5 "Exception" app.log

        4. 递归搜索

        # 递归搜索目录中的Python文件
        grep -rn "import requests" /project/
        # 只显示文件名
        grep -rl "TODO" src/

        四、性能优化技巧

        1. 固定字符串搜索:使用 -F 加速纯文本搜索

          grep -F "fixed-string" largefile.log

        1. 默认行为:正则表达式匹配

        • 没有 -F 选项时grep 默认使用 正则表达式 来匹配文本。这意味着每个搜索的字符串都需要通过正则表达式引擎进行解析和匹配。正则表达式支持复杂的模式(如字符集、量词、特殊字符等),因此 grep 需要解析和处理这些表达式来匹配目标文本。

        • 这种正则表达式匹配通常比直接查找一个简单的固定字符串要慢,尤其是当正则表达式较复杂时,计算量会大大增加。

        2. 使用 -F 选项时:固定字符串匹配

        • grep -F 选项告诉 grep 进行 固定字符串匹配,即不使用正则表达式引擎,而是将搜索模式当作一个普通的固定字符串来处理。

        • 在这种模式下,grep 只需要将目标字符串与文本逐字符进行比较。没有正则表达式的复杂处理,因此能够更高效地执行搜索

        2.限制搜索深度:结合 find 控制递归深度

        find . -maxdepth 3 -type f -exec grep "pattern" {} +
        • -type f:

          • -type f 选项告诉 find 只查找普通文件(f 代表 "file")。这样可以排除目录、符号链接、设备文件等非普通文件。
        • -exec:

          • -exec 选项允许你对 find 查找到的每个文件执行指定的命令。在这里,它表示对找到的每个普通文件执行后续的 grep 命令。
        • grep "pattern":

          • grep "pattern" 是一个常见的命令,表示在文件中搜索指定的字符串或模式。这里 pattern 是你要查找的内容,grep 会检查每个文件是否包含该模式。
        • {}:

          • {}find 命令中的占位符,它会被当前 find 命令找到的每个文件路径替代。也就是说,{} 会被每个普通文件的路径所替代,从而在每个文件上执行 grep "pattern"
        • +:

          • + 表示“批量处理”,它告诉 find 将找到的多个文件一起传递给 grep 命令,而不是对每个文件单独执行一次 grep。这样,grep 会一次性处理所有符合条件的文件,性能上比逐个执行 grep 高效得多。

        3.排除目录

        grep -r --exclude-dir={.git,node_modules} "pattern" .

        六、常见问题解决

        #grep 默认使用BRE,需要转义部分元字符
        grep "a\{2\}" file.txt  # 匹配aa 
        grep -E "a{2}" file.txt  # 不需要转义
        #二进制文件警告:
        grep -a "text" binary.file  # -a 将二进制文件当文本处理
        grep --color=auto "pattern" file  # 强制颜色显示

        总结

        到此这篇关于Linux grep与正则表达式的文章就介绍到这了,更多相关grep与正则表达式内容请搜索北冥有鱼【www.ufcn.cn】以前的文章或继续浏览下面的相关文章希望大家以后多多支持北冥有鱼【www.ufcn.cn】!

        您可能感兴趣的文章:

        • grep用法详解 grep与正则表达式
        • Shell正则表达式之grep、sed、awk实操笔记
        • linux grep正则表达式与grep用法详解
        • 正则表达式grep用法详解
        • shell脚本之正则表达式、grep、sed、awk
        • grep正则表达式匹配中括号的方法实例
        • linux 正则表达式grep实例分析
        • bash 中用于grep的正则表达式
        • linux grep与正则表达式使用介绍
        • shell正则表达式、grep命令和sed命令举例详解
        本文地址:https://www.ufcn.cn/article/2431082.html

        如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!