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

打印 上一主题 下一主题

主题 1659|帖子 1659|积分 4977

一、功能先容

grep(全称是:Global Regular Expression Print)是 Linux/Unix 体系中文本处理惩罚的重要工具,是一个强盛的下令行工具,其通过正则表达式(或平凡字符串)在文件或标准输入中搜索模式,并输出匹配的行到控制台。
grep下令的核心功能和用途主要有以下几点:
1、文本搜索:基于模式(字符串或正则表达式)在文件、输入流或多级目录中搜索内容。
2、模式过滤:支持正向匹配(显示匹配行)和反向匹配(排除匹配行)。
3、上下文展示:输出匹配行及其前后多少行(调试日志场景常用)。
4、统计与定位:统计匹配次数、显示行号、仅输出文件名等。
5、递归操纵:跨目录层级搜索文件。
接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取 deepseek 资 料

二、语法

  1. grep [选项] 模式 [文件/目录...]
  2. grep [选项] PATTERN [FILE...]
复制代码
语法中:
PATTERN指要搜索的模式,可以是字符串或正则表达式。
文件/目录是要搜索的文件或目录。如果未指定文件,grep 将从标准输入读取数据。
三、选项参数先容

1) -i:搜索时忽略大小写,默认情况区分大小写。
  1. grep -i pattern files :不区分大小写的搜索。
  2. grep pattern filename:在文件filename中搜索pattern。
复制代码
2)-v:反向匹配,输出不匹配的行
  1. grep -v "debug" test.txt
复制代码

3)-n:显示匹配行的行号,
  1. grep -n "debug" test.txt
复制代码

4)-c:统计匹配行数(非具体内容)
  1. grep -c "info" test.txt
复制代码

5)-w :只匹配整个单词,而不是字符串的一部分(如匹配‘info’,而不是‘info2’)
  1. grep -w "info" test.txt
复制代码

6)-r / -R :递归地搜索指定目录及其子目录,
  1. grep -r "function" ./src/
复制代码
7)-l :仅显示包含匹配项的文件名,
  1. grep -l pattern files :只列出匹配的文件名
  2. grep -L pattern files :列出不匹配的文件名
复制代码
8)-e 模式:指定多个模式(逻辑"或")
  1. grep -e "error" -e "warn" log.txt
复制代码
利用该下令搜索出文件中能部分匹配到error或warn的全部内容。

9)-A NUM:显示匹配行及其后 NUM 行(After Context)
  1. grep -A 2 "crash" debug.log
复制代码
10)-B NUM:显示匹配行及其前 NUM 行(Before Context)
  1. grep -B 3 "exception" trace.log
复制代码
11)-C NUM:显示匹配行及其前后各 NUM 行(Context)
  1. grep -C number pattern files
复制代码
匹配的上下文分别显示[number]行
12)-E:启用扩展正则表达式(同 egrep)
  1. grep -E "error|warn" app.log
复制代码
13)-F:禁用正则,按字面值匹配(同 fgrep,得当纯字符串)
  1. grep -F ".*" file(匹配 .* 字符串)  
复制代码
14)–color=auto:高亮匹配内容,
  1. alias grep='grep --color=auto'      
复制代码
15)–include:指定匹配的文件类型(需递归)
  1. grep -r --include="*.cpp" "main" ./  
复制代码
16)–exclude:排除特定文件类型
  1. grep -r --exclude="*.tmp" "warn" /tmp/*,排除后缀为.tmp"的文件
复制代码

接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取资料

四、用法示例

1)搜索包含 “error” 或 “critical” 的行,显示行号和上下文
  1. grep -n -C 2 -E "error|critical" /var/log/syslog
复制代码
2)统计 Nginx 日志中 404 状态码出现的次数
  1. grep -c " 404 " /var/log/nginx/access.log
复制代码
3)递归搜索 Python 代码中未完成的 TODO 注释
  1. grep -rnw --include="*.py" "TODO" ./src/
复制代码
4)查抄正在运行的 Java 进程
  1. ps aux | grep "[j]ava"   
复制代码
利用 [j] 制止匹配到grep自身
5)监控实时日志中的非常(tail -f 连续输出)
  1. tail -f /var/log/app.log | grep --color "Exception"
复制代码
6)提取 CSV 文件中第 3 列为 “success” 的行
  1. grep -E "^([^,]*,){2}success," data.csv
复制代码
7)过滤空行和注释行(假设注释以 开头)
  1. grep -v -E "^$|^" config.conf
复制代码
8)与 find 一起利用
  1. find /var/log -name "*.log" -exec grep "error" {} +
复制代码
9)与 awk/sed 管道处理惩罚
  1. grep "data" file.txt | awk '{print $2}' | sed 's/old/new/'
复制代码
10)多文件操纵并行搜索(需 xargs 或 parallel):
  1. find . -name "*.txt" | xargs grep -H "pattern"   -H 显示文件名
复制代码
五、grep中正则表达式用法先容

grep在用于查找文本文件中的特定内容时,常搭配正则表达式一起利用。

  • 基本正则表达式(BRE,默认模式)
  1. .:匹配任意单个字符(换行符除外),a.c → "abc", "a1c"  
  2. ^:匹配行首,^start → 行首为 "start"
  3. $:匹配行尾,end$ → 行尾为 "end"   
  4. []:匹配字符集合中的任意一个字符,[aeiou] → 任意元音字母
  5. [^]:匹配不在字符集合中的任意字符,例如: [^0-9] → 非数字字符   
  6. *:前一个字符匹配 0 次或多次,例如: go*gle → "ggle", "google"
  7. \{n,m\}   前一个字符匹配 n 到 m 次   a\{2,4\} → "aa", "aaa", "aaaa"
  8. \:转义特殊字符(如 \$ 匹配美元符号),例如:\$10 → "$10"        
复制代码

  • 扩展正则表达式(ERE,-E 选项启用)
  1. +:前一个字符匹配1次或多次,例如:go+gle→"gogle","google"(不匹配"ggle")
  2. ?:前一个字符匹配0次或1次,例如:colou?r→"color","colour"
  3. | :逻辑或(匹配多个模式之一)例如:error|warn→"error"或"warn"
  4. ():分组表达式,例如:(ab)+→"ab","abab"
  5. {n,m}:匹配次数范围(无需转义),例如:a{2,4}→"aa","aaa","aaaa"
复制代码
3、正则实战示例
  1. ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
  2. grep 'test' d* 显示所有以d开头的文件中包含test的行。
  3. grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
  4. grep '[a-z]' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
  5. grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成’w(es)t.'就可以了。
  6. 匹配 IP 地址:grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" log.txt
  7. 匹配邮箱地址: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、查抄是否已安装

在终端运行以下下令,若输出版本信息则已安装:
  1. grep --version
复制代码
或查看安装路径(默认 /usr/bin/grep)
  1. which grep
复制代码
出现以下结果则表现体系中已安装grep工具。

2、安装方法

Linux体系的不同发行版中,grep下令的安装方法不同。下面按照发行版的分类举行先容。
1)Debian/Ubuntu 及衍生体系
  1. sudo apt update          更新软件源
  2. sudo apt install grep    安装/重新安装
复制代码
2)RHEL/CentOS/Fedora
  1. CentOS 7 或更早版本中,使用:sudo yum install grep
  2. CentOS 8+/Fedora中,使用:sudo dnf install grep   
复制代码
3)Arch/Manjaro
  1. sudo pacman -Sy grep     同步仓库并安装
复制代码
4)openSUSE
  1. sudo zypper install grep
复制代码
5)Alpine Linux
  1. sudo apk add grep        Alpine 使用 musl 库
复制代码
6) Docker 容器中安装grep
某些底子镜像(如 alpine、scratch)大概未预装 grep,需在 Dockerfile文件中显式安装,在Dockerfile文件中加以下两行指令:
  1. FROM alpine
  2. RUN apk add grep
复制代码
7)源码编译安装
这种安装方式仅当包管理器不可用时可考虑利用,不推荐这种方式。
  1. 下载源码:wget http://ftp.gnu.org/gnu/grep/grep-3.11.tar.xz  
  2. tar -xf grep-3.11.tar.xz
  3. cd grep-3.11
  4. ./configure
  5. make
  6. sudo make install
复制代码
3、验证安装

安装完成后,可通过以下下令查抄是否安装乐成及安装的版本信息。
  1. grep --version
  2.       grep -E 'test' /etc/os-release   测试扩展正则(等效 egrep)
复制代码

### `接待关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取 deepseek资料`
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表