一、功能先容
grep(全称是:Global Regular Expression Print)是 Linux/Unix 体系中文本处理惩罚的重要工具,是一个强盛的下令行工具,其通过正则表达式(或平凡字符串)在文件或标准输入中搜索模式,并输出匹配的行到控制台。
grep下令的核心功能和用途主要有以下几点:
1、文本搜索:基于模式(字符串或正则表达式)在文件、输入流或多级目录中搜索内容。
2、模式过滤:支持正向匹配(显示匹配行)和反向匹配(排除匹配行)。
3、上下文展示:输出匹配行及其前后多少行(调试日志场景常用)。
4、统计与定位:统计匹配次数、显示行号、仅输出文件名等。
5、递归操纵:跨目录层级搜索文件。
接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取 deepseek 资 料
二、语法
- grep [选项] 模式 [文件/目录...]
- grep [选项] PATTERN [FILE...]
复制代码 语法中:
PATTERN指要搜索的模式,可以是字符串或正则表达式。
文件/目录是要搜索的文件或目录。如果未指定文件,grep 将从标准输入读取数据。
三、选项参数先容
1) -i:搜索时忽略大小写,默认情况区分大小写。
- grep -i pattern files :不区分大小写的搜索。
- grep pattern filename:在文件filename中搜索pattern。
复制代码 2)-v:反向匹配,输出不匹配的行
3)-n:显示匹配行的行号,
4)-c:统计匹配行数(非具体内容)
5)-w :只匹配整个单词,而不是字符串的一部分(如匹配‘info’,而不是‘info2’)
6)-r / -R :递归地搜索指定目录及其子目录,
- grep -r "function" ./src/
复制代码 7)-l :仅显示包含匹配项的文件名,
- grep -l pattern files :只列出匹配的文件名
- grep -L pattern files :列出不匹配的文件名
复制代码 8)-e 模式:指定多个模式(逻辑"或")
- grep -e "error" -e "warn" log.txt
复制代码 利用该下令搜索出文件中能部分匹配到error或warn的全部内容。
9)-A NUM:显示匹配行及其后 NUM 行(After Context)
- grep -A 2 "crash" debug.log
复制代码 10)-B NUM:显示匹配行及其前 NUM 行(Before Context)
- grep -B 3 "exception" trace.log
复制代码 11)-C NUM:显示匹配行及其前后各 NUM 行(Context)
- grep -C number pattern files
复制代码 匹配的上下文分别显示[number]行
12)-E:启用扩展正则表达式(同 egrep)
- grep -E "error|warn" app.log
复制代码 13)-F:禁用正则,按字面值匹配(同 fgrep,得当纯字符串)
- grep -F ".*" file(匹配 .* 字符串)
复制代码 14)–color=auto:高亮匹配内容,
- alias grep='grep --color=auto'
复制代码 15)–include:指定匹配的文件类型(需递归)
- grep -r --include="*.cpp" "main" ./
复制代码 16)–exclude:排除特定文件类型
- grep -r --exclude="*.tmp" "warn" /tmp/*,排除后缀为.tmp"的文件
复制代码
接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取资料
四、用法示例
1)搜索包含 “error” 或 “critical” 的行,显示行号和上下文
- grep -n -C 2 -E "error|critical" /var/log/syslog
复制代码 2)统计 Nginx 日志中 404 状态码出现的次数
- grep -c " 404 " /var/log/nginx/access.log
复制代码 3)递归搜索 Python 代码中未完成的 TODO 注释
- grep -rnw --include="*.py" "TODO" ./src/
复制代码 4)查抄正在运行的 Java 进程
利用 [j] 制止匹配到grep自身
5)监控实时日志中的非常(tail -f 连续输出)
- tail -f /var/log/app.log | grep --color "Exception"
复制代码 6)提取 CSV 文件中第 3 列为 “success” 的行
- grep -E "^([^,]*,){2}success," data.csv
复制代码 7)过滤空行和注释行(假设注释以 开头)
- grep -v -E "^$|^" config.conf
复制代码 8)与 find 一起利用
- find /var/log -name "*.log" -exec grep "error" {} +
复制代码 9)与 awk/sed 管道处理惩罚
- grep "data" file.txt | awk '{print $2}' | sed 's/old/new/'
复制代码 10)多文件操纵并行搜索(需 xargs 或 parallel):
- find . -name "*.txt" | xargs grep -H "pattern" -H 显示文件名
复制代码 五、grep中正则表达式用法先容
grep在用于查找文本文件中的特定内容时,常搭配正则表达式一起利用。
- .:匹配任意单个字符(换行符除外),a.c → "abc", "a1c"
- ^:匹配行首,^start → 行首为 "start"
- $:匹配行尾,end$ → 行尾为 "end"
- []:匹配字符集合中的任意一个字符,[aeiou] → 任意元音字母
- [^]:匹配不在字符集合中的任意字符,例如: [^0-9] → 非数字字符
- *:前一个字符匹配 0 次或多次,例如: go*gle → "ggle", "google"
- \{n,m\} 前一个字符匹配 n 到 m 次 a\{2,4\} → "aa", "aaa", "aaaa"
- \:转义特殊字符(如 \$ 匹配美元符号),例如:\$10 → "$10"
复制代码- +:前一个字符匹配1次或多次,例如:go+gle→"gogle","google"(不匹配"ggle")
- ?:前一个字符匹配0次或1次,例如:colou?r→"color","colour"
- | :逻辑或(匹配多个模式之一)例如:error|warn→"error"或"warn"
- ():分组表达式,例如:(ab)+→"ab","abab"
- {n,m}:匹配次数范围(无需转义),例如:a{2,4}→"aa","aaa","aaaa"
复制代码 3、正则实战示例
- ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
- grep 'test' d* 显示所有以d开头的文件中包含test的行。
- grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
- grep '[a-z]' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
- grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成’w(es)t.'就可以了。
- 匹配 IP 地址:grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" log.txt
- 匹配邮箱地址:grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" users.csv
复制代码 六、Linux中grep下令的安装
在大多数 Linux 的发行版(如:RedHat、Debian/Ubuntu、Centos等)中,grep 是一个预装的核心工具,通常无需手动安装。但如果因特殊原因缺失,则必要用户手动安装。
1、查抄是否已安装
在终端运行以下下令,若输出版本信息则已安装:
或查看安装路径(默认 /usr/bin/grep)
出现以下结果则表现体系中已安装grep工具。
2、安装方法
Linux体系的不同发行版中,grep下令的安装方法不同。下面按照发行版的分类举行先容。
1)Debian/Ubuntu 及衍生体系
- sudo apt update 更新软件源
- sudo apt install grep 安装/重新安装
复制代码 2)RHEL/CentOS/Fedora
- CentOS 7 或更早版本中,使用:sudo yum install grep
- CentOS 8+/Fedora中,使用:sudo dnf install grep
复制代码 3)Arch/Manjaro
- sudo pacman -Sy grep 同步仓库并安装
复制代码 4)openSUSE
5)Alpine Linux
- sudo apk add grep Alpine 使用 musl 库
复制代码 6) Docker 容器中安装grep
某些底子镜像(如 alpine、scratch)大概未预装 grep,需在 Dockerfile文件中显式安装,在Dockerfile文件中加以下两行指令:
- FROM alpine
- RUN apk add grep
复制代码 7)源码编译安装
这种安装方式仅当包管理器不可用时可考虑利用,不推荐这种方式。
- 下载源码:wget http://ftp.gnu.org/gnu/grep/grep-3.11.tar.xz
- tar -xf grep-3.11.tar.xz
- cd grep-3.11
- ./configure
- make
- sudo make install
复制代码 3、验证安装
安装完成后,可通过以下下令查抄是否安装乐成及安装的版本信息。
- grep --version
- grep -E 'test' /etc/os-release 测试扩展正则(等效 egrep)
复制代码
### `接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取 deepseek资料`
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |