一、grep 核心定位
grep 是 Linux 文本三剑客(grep、sed、awk)中专注于文本搜索匹配的工具,核心特点:快、准、灵活。
核心用途:解决「从文件/输入流中筛选包含指定模式内容」的需求,后端处理几百兆的def文件、几十G的日志文件时,效率远超手动打开查阅!
二、前置配置(~/.cshrc 预设,提升可读性)
在 ~/.cshrc 中添加以下alias,让搜索结果自动高亮,查看更清晰,配置后执行 source ~/.cshrc生效。
csh# 普通文件搜索,结果高亮显示alias grep 'grep --color=auto'# 压缩文件(*.gz)检索,结果高亮显示alias zgrep 'zgrep --color=auto' |
三、核心语法格式
cshgrep -[参数] "检索内容" 目标文件/目录 |
四、高频常用参数(后端实战必备)
1. 无参数(基础匹配)
核心含义:基础匹配,输出含关键词的整行
示例:grep "Startpoint" reg2reg_path.rpt(搜索时序报告中的起点信息)
2. -e(多关键词匹配)
核心含义:同时匹配多个关键词
示例:grep -e "Startpoint" -e "Endpoint" -e "Slack" reg2reg_path.rpt(一次性抓取时序关键信息)
3. -A/-B/-C(上下文匹配)
核心含义:输出匹配行的上下文;-A n:后n行(after);-B n:前n行(before);-C n:前后各n行(context,空格可有可无)
示例:grep -A2 "Startpoint" reg2reg_path.rpt(输出起点行及后2行,共3行)
4. -r(递归搜索)
核心含义:递归搜索目录下所有文件,该目录下有目录也会搜其下文件
示例:grep -r "Startpoint" timingRpt/*(遍历时序报告目录所有文件)
5. -v(反向匹配)
核心含义:反向匹配,输出不含关键词的行
示例:ps -ef | grep java | grep -v grep(过滤掉grep自身进程,只留innovus进程)
6. -i(忽略大小写)
核心含义:忽略大小写匹配
示例:grep -i "error" app.log(匹配ERROR/Error/error等)
7. -c(统计行数)
核心含义:只统计匹配行数,不输出内容
示例:grep -c "Slack" reg2reg_path.rpt(统计时序报告中Slack相关行数)
五、正则匹配技巧(精准筛选文本)
正则是grep的核心优势,以下是后端日常高频用法,精准匹配所需内容,避免无效信息干扰:
1. 行首/行尾匹配
•匹配以hello开头的行:grep "^hello" file.rpt
•匹配以hello结尾的行:grep "hello$" file.rpt
2. 完整单词匹配
只匹配单独的单词hello,不匹配hellohello、ahello等:grep "\<hello\>" file.rpt
说明:\<锚定词首,\>锚定词尾,确保匹配完整单词。
3. 字符范围匹配(高频重点)
(1)[a-z]:匹配任意一个小写字母
示例:grep "a[a-z]" file.rpt(匹配a后接小写字母的内容)
(2)[A-Z]:匹配任意一个大写字母
示例:grep "ID_[A-Z]" file.rpt(匹配ID_后接大写字母的内容)
(3)[0-9]:匹配任意一个数字
示例:grep "num_[0-9]" file.rpt(匹配num_后接数字的内容)
(4)[^]:反向匹配,排除括号内的字符
示例:grep "a[^a-z]" file.rpt(匹配a后不接小写字母的内容,如a1、a_等)
(5).:匹配任意单个字符(换行符除外)
示例:grep "f.n" file.rpt(匹配fan、fin、fon等)
(6).*:匹配任意一段内容(最常用)
核心说明:涵盖空格、数字、符号等任意内容
示例:grep "a.*p" file.rpt(匹配a开头、p结尾的任意内容,如asdfp、this is a apple等)