Linux grep命令搜索神器详解
1.Linux环境变量详解2.Linux find命令详解3.Linux lsof命令详解
4.Linux grep命令搜索神器详解
5.一文吃透Linux htop命令6.Linux stdin、stdout和stderr详解7.Linux ps命令详解(不是PS)8.Linux 著名的sudo、su是什么?怎么用?9.Linux 查看磁盘信息:df与du命令详解10.Linux &&、& 各种操作符困惑? 看此文11.Linux 常用压缩命令全解,一次搞懂通关!12.Linux 硬链接和软链接怎么区分使用?13.推荐一款基于vim的超可扩展文本编辑器neovim14.Linux Systemd基础教程15.Linux rsync命令详解16.C获取程序名称的方法17.Linux ssh 基础教程18.Linux 如何查询命令的二进制文件位置?19.Linux 如何查看当前系统版本的详细信息?20.Linux 用户账户信息配置文件详解21.Linux Debian发行版系统包管理工具使用教程22.Linux dpkg命令详解23.Linux yum 包管理工具使用教程24.Linux sed 命令详解25.Linux awk 命令详解26.Linux dnf 包管理工具使用教程27.Linux netstat 命令详解28.Linux ss 命令详解29.Linux nc 命令详解30.Linux 用户与组基础教程31.Linux firewalld 命令详解32.Linux iptables 命令详解33.Linux 中如何使用Mosquitto MQTT?34.Linux xattr 命令详解35.Linux locate 命令详解36.Linux history 命令详解37.Linux sort 命令详解38.Linux下Certbot使用教程39.Linux ufw 命令详解40.Linux ifconfig ip 命令详解41.Linux setfacl lsattr chattr 命令详解42.Linux zsh基础用法43.Linux umask 命令详解44.Linux 如何设置特殊权限?45.Linux tmux 基础教程46.Linux pstree 命令详解47.Linux tinyproxy 使用教程48.Linux crontab 使用教程49.Linux procps-ng 包详解50.Linux xargs 命令使用教程51.Linux 比grep更快的ack命令详解52.Linux下比ack更快的ag搜索命令详解53.Linux axel 下载加速命令详解54.Linux 下的模糊查找神器 fzf 使用教程55.Linux pget 下载命令详解56.Linux ffmpeg 基础用法57.Linux 怎么在储存设备上创建文件系统?58.Linux 如何使用parted进行磁盘分区?59.Linux 如何使用dd命令来复制和转换数据?60.Linux 如何使用fdisk进行磁盘相关的操作?61.Linux pgrep 命令详解62.Linux lsblk 命令详解63.Linux pkill 命令使用详解64.Linux gdisk 命令使用详解65.Linux stat 命令使用详解66.Linux tr 命令使用详解67.Linux mpstat 命令使用详解68.Linux ifstat 命令使用详解69.Linux iostat 命令使用详解70.Linux zcat 命令使用详解71.Linux nmcli 命令使用详解72.Linux iftop 命令使用详解73.Linux 下使用更强的ripgrep来搜索74.Linux inode 详解75.Linux 下aria2 下载神器使用详解76.Linux nftables 命令使用详解77.Linux 磁盘挂载教程78.Linux sftp 使用详解79.Linux 性能更好的ftp客户端 lftp 使用详解80.Linux 使用nload 监控网络流量81.Linux 使用 cut 进行文本提取操作82.Linux 下使用ncdu更好的查看磁盘使用83.Linux 使用 sosreport 生成系统报告84.Linux 下使用tracepath进行网络诊断分析85.Linux 下使用vmstat监控系统性能86.Linux 下使用mtr命令来进行网络诊断87.Linux 下使用traceroute来进行网络诊断分析88.Linux 下使用nslookup和dig来查询域名和ip信息89.Linux 下使用tcpdump进行网络分析90.Linux 使用 partprobe 更新分区表91.Linux expr命令详解92.Linux egrep 命令使用详解93.Linux fgrep 命令使用详解一、命令介绍
Grep是“全局正则表达式打印”的缩写(global regular expression print),是一个用于搜索和匹配正则表达式中包含的文件中的文本模式的命令。此外,每个Linux发行版都预装了该命令。
可以使用通用正则表达式语法搜索和过滤文本。它无处不在,以至于动词“grep”已经成为“搜索”的同义词
二、语法
grep [options] pattern [FILE]
- grep:命令本身
- [options]:命令修饰符
- pattern:要找到的搜索查询
- [FILE]:命令将要搜索的文件
示例:grep -i abc output.txt
如果FILE
是-
,则从标准输入中读取数据(不递归),如果没有提供FILE
,则在当前目录递归搜索。
三、常用选项
通用程序信息
--help:输出帮助信息
-V, --version:输出版本信息
模式语法
-E, --extended-regexp:把模式作为扩展的正则表达式
-F, --fixed-strings:把模式作为固定的字符串
-G, --basic-regexp:把模式作为正常的正则表达式,此为默认行为
-P, --perl-regexp:把模式作为`Pecl`兼容的正则表达式
匹配控制
-e [PATTERNS], --regexp=[PATTERNS]:指定给出的正则表达式字符串,此选项可使用多次,则会搜索给出的所有表达式,可结合`-f`一起使用
-f [FILE], --file=FILE:从文件中获取正则表达式,文件中每一行为一个正则表达式,此选项可使用多次,可结合`-e`一起使用,如果文件中包含0个表达式,则不匹配任何内容,如果[FILE]给出的是`-`,则从标准输入中读取数据
-i, --ignore-case:忽略大小写
---no-ignore-case:区分大小写,如果已经使用了`-i`,则使用此选项会取消`-i`的效果,两个选项会彼此覆盖
-v, --invert-match:反转匹配,即查找未匹配到的行
-w, --word-regexp:仅仅选择匹配到的包含整个单词的行
-x, --line-regexp:仅仅整行匹配
通用输出控制
-c, --count:抑制正常的输出,打印匹配到行的数量,如果接`-v, --invert-match`则统计未匹配到的数量
--color[=WHEN], --colour[=WHEN]:输出带颜色,WHEN有三个选项:never, always, auto
-L, --files-without-match:抑制正常的输出,打印未匹配到的文件名
-l, --files-with-matches:抑制正常的输出,打印匹配到的文件名
-m[NUM], --max-count=NUM:指定匹配查找读取的行数,如果[NUM]为0,则会立即停止读取,默认值为-1,表示无限读取
-o, --only-matching:仅仅打印匹配到的行
-q, --quiet, --silent:不输出任何东西,静音模式
-s, --no-messages:抑制错误信息,关于不存在或不可读的文件
输出行前缀控制
-b, --byte-offset:打印匹配到的内容之前基0的字节偏移内容
-H, --with-filename:打印匹配到的文件名,当指定超过一个文件时,此为默认行为
-h, --no-filename:抑制输出文件名,当仅指定一个文件时,或数据来源于标准输出时,此为默认行为
-n, --line-number:输出匹配行的基1的行号
上下文行控制
-A[NUM], --after-context=[NUM]:在匹配到的字符串之后打印指定的行数
-B[NUM], --before-context=[NUM]:在匹配到的字符串之前打印指定的行数
-C[NUM], -[NUM], --context=[NUM]:在匹配到的字符串之前和之后打印指定的行数
--group-separator=[SEP]:当使用`-A`, `-B`, `-C`时,使用指定的分隔符代替默认的`--`
--no-group-separator:当使用`-A`, `-B`, `-C`时,不显示分隔符
文件和目录选择
-a, --text:解析二进制文件作为一个正常文本,等价于`--binary-files=text`
-D[ACTION], --devices=[ACTION]:如果输出的文件是一个设备文件、FIFO或socket,则会使用[ACTION]来解析它,默认情况[ACTION]是read,把设备文件当做普通文件,如果[ACTION]是`skip`,设备文件将会被跳过
-d[ACTION], --directories=[ACTION]:如果输入的文件是一个目录,则会使用[ACTION]来解析它,默认情况[ACTION]是read,把目录当做普通文件,如果[ACTION]是`skip`, 则会跳过此目录,如果[ACTION]是`recurse`,则会在每一个目录下面读取所有文件
--exclude=[GLOB]:跳过匹配到文件名的文件
--exclude-from=[FILE]:从文件中读取匹配模式:跳过匹配到文件名的文件
--exclude-dir=[GLOB]:跳过匹配到的目录,当搜索时递归时,也会跳过子目录
--include=[GLOB]:从匹配到的文件中搜索
-r, --recursive:在给出的每个目录下递归读取所有的文件,与`-d recurse`等价
四、可用的正则表达式语法
? # 前一项是可选的,最多匹配一次
^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* # 一起用代表任意字符。
[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行
\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。
\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b # 单词锁定符,如: '\bgrep\b'只匹配grep。
六、应用实例
- 一般用法
grep abc message.log
- 匹配的结果添加颜色显示
grep --color abc message.log
- 递归搜索
grep -r abc /ssh
- 忽略大小写
grep -i abc message.log
- 统计匹配到的总行数
grep -c abc message.log
- 反转搜索,匹配不包含的行
grep -v abc message.log
- 打印匹配到的字符串行号
grep -n abc message.log
- 仅仅匹配包含整个单词的数据
grep -w linux message.log
- 结合其他命令一起使用,通过通道传递过来
dpkg -L | grep -i openssh
说明:以上搜索`openssh`包
- 打印匹配行之前或之后行的内容
grep abc message.log -A 3
grep abc message.log -B 3
grep abc message.log -C 3
- 使用正则表达式来匹配
grep ^abc message.log
grep abc$ message.log
- 打印匹配到的文件名
grep -l abc a.txt b.txt c.txt
- 仅仅打印匹配到的文本
grep -o abc a.txt b.txt c.txt
- 指定多个正则表达式字符串
grep -e abc -e Acb -e cbe message.log
- 从文件中读取模式
grep -f pattern1.txt pattern2.txt
- 使用
|
分割多个匹配模式
grep abc|def message.log
- 在当前目录下的所有文件中搜索匹配
grep abc *
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)