资讯动态

Quick Reference 速查手册:Grep 命令从入门到正则表达式实战指南

发布时间:2026/9/23 18:47:11 来源:尧图企业网站定制
Quick Reference 速查手册Grep 命令从入门到正则表达式实战指南【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址: https://gitcode.com/jaywcjlove/referencegrep 是 Linux/Unix 命令行世界最常用的文本搜索工具本指南以 docs/grep.md 备忘清单为骨架系统讲解 grep 的基本用法、13 个高频选项、正则表达式的五大基础构件并结合命令历史检索、递归搜索、日志上下文查看等真实场景给出可立即复制的实战命令。读完本文你将掌握从在文件中找一行字符串到用正则表达式精确过滤日志与配置文件的完整能力并能顺势使用仓库内的 正则表达式速查清单 解决更复杂的匹配需求。快速入门grep 的两种基本形态grep 的核心能力是按模式pattern过滤文本行它有两种最基础的使用方式。方式一搜索标准输出文本流。当不指定任何文件时grep 从标准输入读取数据因此可以放在管道末尾作为其他命令输出的过滤器$ grep [options] search_string方式二在文件中搜索确切的字符串$ grep [options] search_string path/to/file例如打印myfile.txt中包含字符串mellon的所有行$ grep mellon myfile.txt关于文件名通配符传给 grep 的文件名中可以使用 Shell 通配符由 Shell 展开后交给 grep。例如grep error /var/log/*.log会展开为匹配该模式的所有.log文件并逐一搜索。注意通配符作用于文件名而非搜索内容本身——搜索内容是否支持通配取决于下面讲到的正则表达式语法。关于引号推荐始终用单引号包裹搜索模式例如grep mellon myfile.txt。单引号可防止 Shell 对$、*、(、|等特殊字符做变量展开或通配展开保证模式原样传递给 grep。常用选项速查表原文档给出了一张覆盖日常绝大多数场景的选项表此处完整保留并逐项补充说明| 选项 | 示例 | 说明 | |:-|:-|:-| |-i|grep -i ^DA demo.txt| 忘记区分大小写-i让匹配忽略大小写 | |-w|grep -w of demo.txt| 仅搜索完整的单词要求两侧是单词边界 | |-A|grep -A 3 Exception error.log| 匹配字符串后显示 3 行after context | |-B|grep -B 4 Exception error.log| 在匹配字符串前显示 4 行before context | |-C|grep -C 5 Exception error.log| 在匹配字符串周围显示 5 行context | |-r|grep -r github.io /var/log/nginx/| 递归搜索在子目录内 | |-v|grep -v warning /var/log/syslog| 返回所有与模式不匹配的行反向选择 | |-e|grep -e ^al filename| 指定匹配模式可多次使用实现或也能匹配以-开头的模式 | |-E|grep -E ja(s\|cks)on filename| 扩展正则表达式匹配包含 jason 或 jackson 的行 | |-c|grep -c error /var/log/syslog| 计算匹配行数只输出统计数字 | |-l|grep -l robot /var/log/*| 打印包含匹配内容的文件名称 | |-o|grep -o search_string filename| 只显示字符串的匹配部分而非整行 | |-n|grep -n go demo.txt| 显示匹配所在的行号 |逐项解读与组合技巧-i忽略大小写grep -i error app.log会同时匹配error、Error、ERROR等。它与-w、-v等选项可自由组合。-w整词匹配grep -w of demo.txt只匹配独立的单词of而不会命中off、ofs中的of子串。-A/-B/-C上下文行排查异常时最实用。-A 3显示匹配行及其后 3 行-B 4显示匹配行及其前 4 行-C 5则是前后各 5 行。查看堆栈跟踪、日志上下文时-C通常一步到位。-r递归对目录做递归搜索等价于 GNU grep 的-R配合-n输出文件:行号:内容是代码库全局检索的基本姿势。-v反向匹配grep -v warning /var/log/syslog输出所有不包含warning的行常用于剔除噪声、过滤调试日志。-e与-E的区别这是最容易混淆的一对。-e是指定模式的选项其模式按基本正则表达式BRE解释主要价值在于① 可重复使用多次实现多个模式的或匹配如grep -e foo -e bar file② 让以-开头的模式如grep -e -foo不会被误认为选项。而-E是启用扩展正则表达式ERE让、?、|、()等元字符无需反斜杠转义即可直接使用。-E也常与-e配合grep -E -e pattern1 -e pattern2 file。-c计数只输出匹配行数便于在脚本中快速统计错误数量结合-v可统计不含某模式的行数。-l只列文件名在多文件、递归场景下快速定位哪些文件包含目标常用于批量确认。-o只输出匹配部分配合正则捕获子串可以提取而非过滤例如从日志中抽取 IP、时间戳等字段。-n行号输出格式为行号:内容是定位代码问题、日志位置的基础选项可与-r组合使用。Grep 正则表达式五大基础构件grep 的搜索模式本质是正则表达式。原文档整理了 grep 中最常用的五组正则构件掌握它们即可覆盖 80% 的日常匹配需求更复杂的语法可查阅 完整正则表达式速查清单。通配符Wildcards| 符号 | 说明 | |:-|:-| |.| 匹配任意一个字符 | |?| 前一项可选且最多只能出现一次需-E或在 BRE 中写作\? | |*| 前一项可选可以出现任意多次 | || 前一项必需且可以出现多次需-E或在 BRE 中写作\ |例如grep colou?r file配合-E可同时匹配color与colourgrep a.c file可匹配abc、a-c等任意a 任意字符 c的组合。量词Quantifiers| 量词 | 说明 | |:-|:-| |{n}| 前一项恰好出现 n 次 | |{n,}| 前一项出现 n 次或更多 | |{,m}| 前一项最多出现 m 次 | |{n,m}| 前一项出现 n 到 m 次之间 |量词让精确控制重复次数成为可能。例如grep -E [0-9]{4} file匹配恰好 4 位数字grep -E [0-9]{2,4} file匹配 2 到 4 位数字。在基本正则表达式不加-E中需写作\{n,m\}形式。POSIX 字符类| 字符类 | 说明 | |:-|:-| |[:alpha:]| 任意大小写字母 | |[:digit:]| 任意数字 | |[:alnum:]| 任意大小写字母或数字 | |[:space:]| 任意空白字符 |POSIX 字符类必须嵌套在方括号中使用例如grep [[:digit:]] file匹配包含数字的行。相比[0-9]、[a-zA-Z]POSIX 类语义更清晰且与 locale 相关是跨平台脚本中更稳妥的写法。完整的 15 个 POSIX 类含[:punct:]、[:xdigit:]、[:upper:]等见 正则表达式速查清单的 POSIX 字符类小节。字符集字符串类| 字符集 | 说明 | |:-|:-| |[A-Za-z]| 任意大小写字母 | |[0-9]| 任意数字 | |[0-9A-Za-z]| 任意大小写字母或数字 |方括号定义字符集合集合内可写范围如0-9或直接列举字符以^开头表示取反如[^0-9]匹配任意非数字字符。位置锚点| 锚点 | 说明 | |:-|:-| |^| 行的开头 | |$| 行结束 | |^$| 空行 | |\| 词的开头 | |\| 词尾 |锚点不消费字符只限定匹配发生的位置。例如原文档中的grep -e ^al filename匹配以al开头的行grep error$ file匹配以error结尾的行grep -v ^$ file则可剔除空行。实战示例七大高频场景原文档提供了若干可直接上手的实战片段以下全部保留并补充说明。1. 搜索命令行历史记录history | grep git输出历史中所有输入过git命令的记录。这是管道用法的典型代表history的输出作为文本流喂给 grep 过滤无需任何中间文件。2. 搜索多个文件并定位命中文件grep -l text file1 file2 file3...-l只打印包含匹配文本的文件名适合在多个文件间快速判断哪里出现了目标内容再配合grep -n精确定位行号。3. 多级目录中递归搜索grep text . -r -n.表示当前目录-r递归进入所有子目录-n附带行号。输出格式形如./src/main.js:42:const text ...是代码库全局检索的标准姿势。4. 搜索结果中包括或排除指定文件# 目录中所有的 .php 和 .html 文件中 # 递归搜索字符 main() grep main() . -r --include *.{php,html} # 在搜索结果中排除所有 README 文件 grep main() . -r --exclude README # 在搜索结果中排除 filelist 文件列表里的文件 grep main() . -r --exclude-from filelist三个文件过滤选项各有分工--include只搜索匹配 glob 的文件--exclude跳过匹配 glob 的文件--exclude-from从指定文件中逐行读取要排除的文件名。三者均可与-r组合是只搜源码、跳过依赖和文档这类场景的关键手段。注意模式main()中的()在基本正则下是字面量因此这里匹配的是字符串main()本身。5. 输出包含匹配字符串的行号-ngrep text -n file_name # 或 cat file_name | grep text -n # 多个文件 grep text -n file_1 file_2cat file | grep与grep file等价但后者省去一次进程与管道开销是更推荐的写法。多文件时行号输出自动变为文件:行号:内容的格式。6. 忽略匹配样式中的字符大小写-iecho hello world | grep -i HELLO # hello虽然搜索串写作大写HELLO-i使其忽略大小写成功匹配小写hello并输出原行。7. 统计文件或文本中包含匹配字符串的行数-cgrep -c text file_name只输出一个数字——命中的行数适合在脚本中做条件判断或快速统计错误量。8. 组合进阶过滤配置与进程仓库的 Linux 命令速查清单 中还收录了 grep 的两个高频组合用法一并分享# 查看去掉注释和空行的配置-E 扩展正则 -v 反向选择 grep -Ev ^\s*($|#|;) example.conf # 定位进程搜索进程 telnet 的 ID ps aux | grep telnet第一个例子用-v反向剔除#开头注释、;开头部分配置的注释以及空行直接得到有效配置行第二个例子通过管道把ps aux的进程列表交给 grep 过滤是定位进程的标准组合。从 Grep 走向正则表达式的完整参考grep 的-E模式只是正则表达式的入口。当你需要处理更复杂的需求——如反向引用、前瞻/后顾断言、命名捕获组、原子组、贪婪与惰性匹配时仓库中的 docs/regex.md 提供了系统性的速查它涵盖字符类、量词、元序列\d、\w、\s等、锚点、组构造、零宽度断言、POSIX 字符类以及 Python、JavaScript、PHP、Java、MySQL 等语言中的正则用法对照与本文档形成grep 入门 → 正则进阶的完整学习链路。例如在grep -E中同样适用的几个进阶模式分组与或匹配grep -E (in|out)put file匹配input或output边界匹配grep -E \b[a-zA-Z]{6}\b file匹配恰好 6 个字母的完整单词范围限定grep -E ^[a-zA-Z]{4,20}$ file匹配 4 到 20 个字母组成的整行。具体语法与示例均可点击 正则表达式示例 查阅。常见误区与实用提示基本正则BRE与扩展正则ERE不加选项时 grep 按 BRE 解释、?、|、()、{}都需转义如\加-E后这些元字符直接生效。原文档-e行与-E行正体现了这一区别grep -e ^al中^是锚点而grep -E ja(s|cks)on中|与()无需转义。若见到ja(s\|cks)on这种写法那是 Markdown 表格中对|的转义表示。模式务必用单引号引用防止 Shell 展开$、*、!等字符确保正则原样到达 grep。注意退出码grep 匹配到至少一行时退出码为 0无匹配为 1出现错误为 2可在脚本中直接用于条件判断。用-o提取而非过滤当只需要匹配子串如日志中的 IP时-o比整行输出更干净配合sort | uniq -c还能做频率统计。先-l定位再-n精查在大目录里先列出命中文件再对目标文件加-n查行号效率远高于一次全量输出。另见正则表达式完整速查清单符号、范围、分组、断言、多语言正则用法一站式速查Linux 命令速查清单含 grep、pgrep、sed、awk 等命令的配套速查【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址: https://gitcode.com/jaywcjlove/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价