正则表达式grep命令
grep命令
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。
模式::由正则表达式字符及文本字符所编写的过滤条件
语法:grep [OPTIONS] PATTERN [FILE...]
常用选项:
--color=auto #对匹配到的文本着色显示 ,系统默认将grep别名设置为:grep='grep --color=auto'
-m # #只显示匹配到的#行
-v #显示不被pattern匹配到的行
-i #忽略字符大小写
-n #显示匹配的行号
-c #统计匹配的行数
-o #仅显示匹配到的字符串
-q #静默模式,不输出任何信息
-A #显示匹配到行的后几行
-B #显示匹配到行的前几行
-C #显示匹配到的行的前后几行
-e #实现多个选项间的逻辑or关系
-w #匹配整个单词
-E #使用ERE
-F #相当于fgrep,不支持正则表达式
-f #file 根据模式文件处理
正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式, 其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
分为两大类,基本的正则表达式和扩展的正则表达式,二者元字符的区别如下:
1、基本正则表达式元字符
^ #如果在[]外则表示以某个字符开头,如果在[]内,则表示除某些字符以外
$ #表示以某个字符结尾
. #表示匹配任意一个字符
* #表示匹配前面字符任意次
[] #表示匹配括号内的多个字符中的任意一个
.* #表示匹配所有
[^] #表示匹配除括号内以外的所有字符
^$ #表示匹配空行信息
\ #将含有特殊含义的字符转义为原字符的含义
2、扩展的正则表达式
+ #表示前面字符出现一次或一次以上
? #表示前面字符出现0次或一次以上
| #表示或者的关系,匹配多个信息
() #匹配一个整体信息,可以进行后项引用
{} #定义前面的字符出现的次数
除此之外正则表达式也支持下面的元字符:
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
一、grep常用选项
举例1:grep查找root关键字,且显示匹配到的第一行

观察以上三条命令的区别,不加-m选项,则默认显示匹配到的所有的行,加了-m选项则只显示-m指定的行数
举例2:显示文档中除shenzhen以外的所有的行

通过以上结果可知,当加上-v选项后,shenzhen所在的那行不再被显示
举例3:不区分大小写查找文档中的shenzhen字符

当加上-i选项后,grep查找时,不区分关键字的大小写
举例4:查找shenzhen字符并显示出字符在文档中的行数

加上-n选项后,会在关键词所在行的行首显示出关键词在文档中的行数
举例5:统计文档中含有shenzhen字符的所有行的数量

加上-c选项后,会统计包含shenzhen字符的行数
举例6:仅显示匹配到的字符

加上-o选项不会显示所匹配到的行,仅显示匹配到的字符
举例7:静默显示,即不输出任何信息

在查询root字符时,不会 输出任何结果,但是会有执行结果
举例8:显示匹配到的行及其后面那一行

加上-A(after)选项,并指定行数为1,则显示的结果为匹配到的行及其后面哪一行
举例9:显示匹配到的行及其前面哪一行

使用-B(before)选项,并指定行数为1,则显示匹配到的行及其前一行
举例10:显示匹配到的行及其前后1行

使用-C选项并指明其行数为1,则显示其匹配到的行以及前后各一行
举例11:匹配多个选项

使用-e选项能实现匹配shenzhen或者longhua的字符的行,并显示到屏幕
举例12:精确匹配到某个单词

不加-w选项,grep默认会显示出所有包含字符的行,加上-w则表示显示匹配到这个单词的行
举例13:通过扩展的正则匹配

由于?只支持扩展的正则表达式,所以需要在前面加上-E选项才能匹配到关键字符
二、grep位置锚定用法:
常用的表达式:
^ #行首锚定,用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^<pattern>$ #用于模式匹配整行
^$ #匹配空行
^[[:space:]]*$ #匹配空白行
\<或者\b #词首锚定,用于单词模式的最左侧
\>或者\b #词尾锚定,用于单词模式的最右侧
\<pattern\> #匹配整个单词
举例:查找/etc/passwd中以root开头的行

在查找的字符前加^,只显示以该字符开头的行
举例2:查找/etc/passwd中以nologin结尾的行

在要匹配的字符后面加$,则grep会查找出以该字符结尾的所有行
举例3:查找出文档内容中以大写Z开头,并以520结尾的行

举例4:查找出文档中的空行

^$以这两个字符作为关键字符去匹配,意味着此行内没有任何内容,即空行
举例5:找出文档中空白行

从上图可知,^$匹配不了空白行,^[[:space:]]*$的含义为,以空白行开头且中间有任意个空白字符的行
举例6:查找文档中re在词尾的行

此处需要注意的是,用引号将模式给引起来,否则不生效
三、grep匹配次数
\{n\} #前面的字符重复n次
\{n,\} #前面的字符重复n次以上
\{m,n\} #前面的字符重复m次以上n次以下
举例1:匹配字符r后面的o出现3次的行

注意观察,标红的字符为匹配到的字符,当连续出现3个o则被匹配
举例2:匹配字符r后面的o出现最少3次,最多4次的行

观察此图和上图的区别,可知上图始终只能标识3个o,此图中则标识3个和4个o
举例3:匹配字符r后的o至少3次以上

举例4:匹配字符r后面的o最多出现3次

上图中,匹配o的次数包括0次,1次,2次,3次
四、分组及后向引用
\(\)将一个或多个字符捆绑在一起,当作一个整体处理,分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中吗,这些变量的命名方式为:\1,\2,\3……
举例:利用grep分组匹配字符

以上将root和admin分别放在\(\)中,则将root分成组1,admin分成组2,后面再次出现重复字符时,可以通过\1和、2代替
五、或者
可以用符号\| 来表示匹配中的或者选项
举例:过滤出文档中Cat或者cat

在上图中\|则表示的是逻辑中的或的意思
正则表达式grep命令的更多相关文章
- linux:正则表达式grep命令
基本语法一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串. 一.选择:| | 竖直分隔符表示选择,例如"boy|girl"可 ...
- NO22 Linux正则表达式--grep命令常用参数
Linux正则表达式: 一.基础正则第一波字符说明: 示例: 二.基础正则第二波字符说明: 三.基础正则第二波字符说明: 示例: grep:一般常用参数 示例:+和* ?和.: |: () ...
- Linux正则表达式grep与egrep
grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...
- Linux grep命令和正则表达式
介绍 grep是一个功能强大的文本搜索命令,可以用它来搜索某个文件中是否包含指定的搜索内容,它可以利用正则表达式来做复杂的筛选操作,它还可以为其它命令传输给管道的筛选,比如我们常用到的分析单个进程的操 ...
- 快速掌握grep命令及正则表达式
Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...
- 正则表达式2——grep命令
grep是Global search Regular Expression and Print out the line的简称. 1. grep命令基本用法 命令格式: grep [选项][模式][文 ...
- Linux grep 命令中的正则表达式详解
在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expres ...
- grep命令及基本正则表达式
grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功 ...
- Linux - 结合正则表达式使用grep命令
Grep with Regular Expression grep命令基本用法 grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名参数说明: ...
随机推荐
- Python--day68--Django ORM常用字段、不常用的字段、自定义字段
ORM和数据库的对应关系: Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建 ...
- java多异常处理
声明异常时尽可能声明具体异常类型,方便更好的处理; 方法声明几个异常就对应有几个catch块; 若多个catch块中的异常出现继承关系,父类异常catch块放在最后; 在catch语句块使用Excep ...
- 中和IOS七层架构和TCP/IP四层架构的五层架构
五层架构分别为应用层.运输层.网络层.数据链路层.物理层. IOS架构把应用层又细分为应用层.表示层.会话层 TCP/IP把网络层改名网际层,数据链路层和物理层结合成网络接口层 其实只要学习五层协议, ...
- 2019年7月20日针对iPhone7/7P有锁机的爆破限制
背景 2019年7月20号苹果更改了激活策略,致使卡贴机一夜回到解放前,目前只能使用tmsi或者tmsi+iccid模式激活手机,但是缺点是移动联通信号真的不稳定,漏接电话,无法开启热点等等毛病.尤其 ...
- H3CSTP、RSTP的问题
- Linux 字节序
小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高 级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在 乎它操作的数据的字节序 ...
- 2018-2-13-win10-uwp-listView-绑定前一项
title author date CreateTime categories win10 uwp listView 绑定前一项 lindexi 2018-2-13 17:23:3 +0800 201 ...
- 小白学 Python 爬虫(29):Selenium 获取某大型电商网站商品信息
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- mac系统上访问docker容器中的ip配置
使用 mac系统,发现docker没有 docker0网桥,无法直接在宿主机上 访问 容器的ip, 在测试的时候有这种需求,而不是通过-p的方式,可以参考下面的连接,主要就是 修改 setting.j ...
- CentOS遇到Qt编译问题(error: cannot find -lGL)
1.安装Qt,进入CentOS系统的终端,依次执行以下命令 chmod +x qt-opensource-Linux-x64-5.5.1.run ./qt-opensource-linux-x64-5 ...