Linux中grep下令功能及用法详解
一、功能先容grep(全称是:Global Regular Expression Print)是 Linux/Unix 体系中文本处理惩罚的重要工具,是一个强盛的下令行工具,其通过正则表达式(或平凡字符串)在文件或标准输入中搜索模式,并输出匹配的行到控制台。
grep下令的核心功能和用途主要有以下几点:
1、文本搜索:基于模式(字符串或正则表达式)在文件、输入流或多级目录中搜索内容。
2、模式过滤:支持正向匹配(显示匹配行)和反向匹配(排除匹配行)。
3、上下文展示:输出匹配行及其前后多少行(调试日志场景常用)。
4、统计与定位:统计匹配次数、显示行号、仅输出文件名等。
5、递归操纵:跨目录层级搜索文件。
接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取 deepseek 资 料
二、语法
grep [选项] 模式 [文件/目录...]
grep [选项] PATTERN
语法中:
PATTERN指要搜索的模式,可以是字符串或正则表达式。
文件/目录是要搜索的文件或目录。如果未指定文件,grep 将从标准输入读取数据。
三、选项参数先容
1) -i:搜索时忽略大小写,默认情况区分大小写。
grep -i pattern files :不区分大小写的搜索。
grep pattern filename:在文件filename中搜索pattern。
2)-v:反向匹配,输出不匹配的行
grep -v "debug" test.txt
https://i-blog.csdnimg.cn/direct/30e9dc3c185a4ebfbad4c1bf4e1ecf25.png
3)-n:显示匹配行的行号,
grep -n "debug" test.txt
https://i-blog.csdnimg.cn/direct/5dbbc14e1f5c483d8b4ef0169f867b86.png
4)-c:统计匹配行数(非具体内容)
grep -c "info" test.txt
https://i-blog.csdnimg.cn/direct/0c35b4731b4b41f7b4b390cbdb19aaab.png
5)-w :只匹配整个单词,而不是字符串的一部分(如匹配‘info’,而不是‘info2’)
grep -w "info" test.txt
https://i-blog.csdnimg.cn/direct/06626e4e4b5245a88d34fe53c11deddc.png
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的全部内容。
https://i-blog.csdnimg.cn/direct/90bcf1d53ae84ac3bec5060acc32ad0e.png
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
匹配的上下文分别显示行
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"的文件
https://i-blog.csdnimg.cn/direct/f5f6ccbae6e2457c931c2291af0b79b4.png
接待关注工 众 号: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 进程
ps aux | grep "ava"
利用 制止匹配到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在用于查找文本文件中的特定内容时,常搭配正则表达式一起利用。
[*]基本正则表达式(BRE,默认模式)
.:匹配任意单个字符(换行符除外),a.c → "abc", "a1c"
^:匹配行首,^start → 行首为 "start"
$:匹配行尾,end$ → 行尾为 "end"
[]:匹配字符集合中的任意一个字符, → 任意元音字母
[^]:匹配不在字符集合中的任意字符,例如: [^0-9] → 非数字字符
*:前一个字符匹配 0 次或多次,例如: go*gle → "ggle", "google"
\{n,m\} 前一个字符匹配 n 到 m 次 a\{2,4\} → "aa", "aaa", "aaaa"
\:转义特殊字符(如 \$ 匹配美元符号),例如:\$10 → "$10"
[*]扩展正则表达式(ERE,-E 选项启用)
+:前一个字符匹配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 '' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成’w(es)t.'就可以了。
匹配 IP 地址:grep -E "({1,3}\.){3}{1,3}" log.txt
匹配邮箱地址:grep -E "+@+\.{2,}" users.csv
六、Linux中grep下令的安装
在大多数 Linux 的发行版(如:RedHat、Debian/Ubuntu、Centos等)中,grep 是一个预装的核心工具,通常无需手动安装。但如果因特殊原因缺失,则必要用户手动安装。
1、查抄是否已安装
在终端运行以下下令,若输出版本信息则已安装:
grep --version
或查看安装路径(默认 /usr/bin/grep)
which grep
出现以下结果则表现体系中已安装grep工具。
https://i-blog.csdnimg.cn/direct/63b5018c574244d191bc6c74853fdb01.png
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
sudo zypper install grep
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企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]