Linux中grep命令功能及用法详解

一、功能介绍

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:反向匹配,输出不匹配的行

grep -v "debug" test.txt 

在这里插入图片描述

3)-n:显示匹配行的行号,

grep -n "debug" test.txt

在这里插入图片描述

4)-c:统计匹配行数(非具体内容)

 grep -c "info" test.txt 

在这里插入图片描述

5)-w :只匹配整个单词,而不是字符串的一部分(如匹配‘info’,而不是‘info2’)

grep -w "info" test.txt

在这里插入图片描述

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 进程

ps aux | grep "[j]ava"   

使用 [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在用于查找文本文件中的特定内容时,常搭配正则表达式一起使用。

  1. 基本正则表达式(BRE,默认模式)
 .:匹配任意单个字符(换行符除外),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. 扩展正则表达式(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 '[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、检查是否已安装

在终端运行以下命令,若输出版本信息则已安装:

grep --version

或查看安装路径(默认 /usr/bin/grep)

which 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

sudo zypper install grep

5)Alpine Linux

sudo apk add grep        Alpine 使用 musl 库

6) Docker 容器中安装grep

某些基础镜像(如 alpinescratch)可能未预装 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资料`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值