Linux中grep详解

一、grep基本介绍

全拼:Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文本逐行进行匹配检查,打印匹配到的行.

模式:由正则表达式的元字符及文本字符所编写出的过滤条件﹔

grep命令是Linux系统中最重要的命令之一,功能是从文本文件或管道数据流中筛选匹配的行和数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令

grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式

二、正则表达式grep实践

首先先看一下这个测试文件的内容吧

2.1、输出以 I 开头的行(不区分大小写)

注: 这里的-i代表不区分大小写, -n代表显示匹配行和行号

2.2、输出以.结尾的行

注: 因为.在这里有着特殊含义, 所以要用\转义一下, 如果不加转义字符的话, grep就会把它当做正则表达式来处理(.代表的含义是匹配任意一个字符)

2.3、$符号

  • 注意在Linux平台下, 所有文件的结尾都有一个$符
  • 可以利用cat -A 查看文件

2.4、^$(代表空行的意思)组合符

找出文件的空行, 以及行号

2.5、.点符号

"."点表示任意一个字符, 有且只有一个, 不包含空行

2.6、*符号

"*"表示找出前一个字符0次或一次以上

找出文件中i出现0次或多次的行和行号

2.7、.*组合符

".*"表示所有内容, 包括空行

2.8、^.*t符 (含义: 以任意内容开头, 直到t结束)

2.9、[abc]中括号

中括号表达式,[abc]表示匹配中括号中任意一个字符, a或b或c,常见的形式如下;

  • a-z\]匹配所有小写单个字母\[A-Z\]匹配所有单个大写字母

  • 0-9\]匹配所有单个数字

匹配abc字符中的任意一个,得到它的行数和行号

2.10、grep的参数-o

使用"-o"选项, 可以值显示被匹配到的关键字, 而不是讲整行的内容都输出.

显示出文章中有多少行有a

"-c"只统计匹配的行数

2.11、[^abc]中括号中去反

\^abc\]或\[\^a-c\]这样的命令, "\^"符号在中括号中第一位表示排除, 就是排除字符a,b,c 注: **出现再中括号里的尖角号表示取反** ![](https://file.jishuzhan.net/article/1703484546042826753/e010a133f530497faa09279e5e3f7ddd.png) # 三、扩展正则表达式grep实践 **此处使用grep -E进行实践扩展正则, egrep官网已经弃用了** ### 3.1、+号 **+号表示匹配前一个字符1一次或多次,必须使用grep-E扩展正则** ![](https://file.jishuzhan.net/article/1703484546042826753/21ce9d521f1848589bd3aacb32798cda.png) ### 3.2、?符 **匹配前一个字符0次或1次** 找出文件中包含gd或者god的行 ![](https://file.jishuzhan.net/article/1703484546042826753/ab083f58d1dc43ea89c4be443d677306.png) ### 3.3、\|符 **竖线\|再正则中是或者的意思** **找出opt目录中txt结尾的文件, 其名字中包含a或者e, 不区分大小写(-i)** ![](https://file.jishuzhan.net/article/1703484546042826753/1429b82f27764da9b5afaa223a249116.png) ### 3.4、()小括号 **将一个或多个字符捆绑在一起, 当作一个整体进行处理** ![](https://file.jishuzhan.net/article/1703484546042826753/f4337c8dbd9d41d0982aaec6334bb4d0.png) ### 3.5、{n,m}匹配次数 **{n,m}:匹配前一个字符至少n次, 最多m次** **{n,}: 匹配前一个字符至少n次, 没有上限** **{,m}: 匹配前一个字符最多m次,可以没有** **重复前一个字符各种次数, 可以通过-o参数显示明确的匹配过程** ![](https://file.jishuzhan.net/article/1703484546042826753/2c21cd9f7aa24025b484884c5856d26e.png)

相关推荐
华清远见IT开放实验室25 分钟前
【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!
linux·驱动开发·stm32·开发板·课程升级
钡铼技术物联网关35 分钟前
工业4.0时代:RK3588边缘工业计算机助力AGV导航升级
linux·arm开发·人工智能·5g·边缘计算
因缘而起11 小时前
【Shell】模拟爬虫下载天龙八部小说
linux·服务器·数据库
JenKinJia1 小时前
linux下编译Websocketpp,适用x86和armv8
linux·运维·服务器
程序员JerrySUN2 小时前
深入解析嵌入式Linux系统架构:从Bootloader到用户空间
linux·运维·驱动开发·嵌入式硬件·系统架构
czhc11400756632 小时前
LINUX 5 cat du head tail wc 计算机拓扑结构 计算机网络 服务器 计算机硬件
linux·服务器·计算机网络
AR72 小时前
Linux与Windows跨平台文件共享实现
linux
暮云星影2 小时前
附录:LInux编辑器学习笔记
linux·学习·编辑器
什么半岛铁盒2 小时前
深入解析Linux软硬链接:原理、区别与应用实践
linux
晴空๓3 小时前
在CentOS上安装Docker需要注意的事项
linux·docker·centos