Linux正则表达式grep,egrep 及相应的正则表达式用法详解
一、正则表达式介绍:
所谓正则,又称正则表达式、正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
正则表达式的字符串表示方式按照严谨度的不同,分为基础正则表达式和扩展正则表达式。为了能够进一步了解正则表达式在文本处理中的应用,下面我们利用grep命令和egrep命令进行探讨。
grep命令:
grep [OPTIONS] PATTERN [FILE...]
--color : color有三个值供选择:never、always、auto。always和auto的区别就是,always会在任何情况下都给匹配字段加上颜色标记,当通过管道或重定向时就会多出一些控制字符;而auto则只在输出到终端时才加上颜色。
-o:只显示被模式匹配到的内容
-i:搜索时不区分字符大小写;
-v:显示不能够被模式匹配到的行;取反;
-E:使用扩展的正则表达式
-A # :显示匹配到的内容后面多少行
-B # : 显示匹配到的内容前面多少行
-C # : 显示匹配到的内容前后多少行
Grep常用选项介绍:
--color:让匹配到的字符用颜色显示出来;
检索/etc/passwd文件中包含root字符的文件,然后用颜色显示匹配到的字符
给grep命令做了命令别名,这样以后就不用每次加上--color参数了;
-o:只显示被模式匹配到的内容
检索/etc/passwd 里面是否有centos用户,如果加上-o 选项,只显示匹配到的行;
-i:搜索时不区分字符大小写;
检索/etc/fstab中包含"uuid"的小写字符串,最后找的的结果都是大写字符的行,不区分大小写
-v:显示不能够被模式匹配到的行;取反;
检索/etc/init.d 所有包含#号的行;加上-v后,就是取反,只显示不包括#号的行;
-A # :显示匹配到的内容后面多少行,#号可以是任意数字;
检索/etc/inittab 带0的行,加上"-A 2"后就多显示了后面的2行的内容;
-B # : 显示匹配到的内容前面多少行
检索/etc/inittab 带0的行,加上"-B 2"后就多显示前面的2行的内容;
-C # : 显示匹配到的内容前后多少行
检索/etc/inittab 带0的行,加上"-B 2"后就多显示前面和后面各2行的内容;
-E:使用扩展的正则表达式,表示方法 egrep 或者 grep -E ;
基本正则表达式元字符:
字符匹配:
. :匹配任意单个字符
检索/etc/passwd 包含r..t的字符, . 可以匹配任意单个字符; 这里的..匹配2个任意字符;
[ ]:匹配指定范围内的任意单个字符
检索/etc/rc.d/rc.sysinit 中包含N或小n的字符后面跟了任意2个字符的字符串;用-o只显示匹配到的字符串
[[:digit:]]:匹配任意一个数字;[0-9]
[[:lower:]]:匹配任意一个小写字母;[a-z]
[[:upper:]]:匹配任意一个大写字母;[A-Z]
[[:space:]]:匹配任意一个空白字符,制表符,空格和tab键;
[[:punct:]]:匹配任意一个标点符号;
[[:alnum:]]:匹配任意一个字母或数字;[0-9a-zA-Z]
[[:alpha:]]:匹配任意一个字母;[a-zA-Z]
[^]:匹配指定范围外的任意单个字符
次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数;工作于贪婪模式
*:匹配其前一个字符的任意长度,表示0次、1次或多次;处于贪婪模式,有多少个都显示出来;
.* : 任意长度的任意字符;
只要包含ab开头的行都显示出来;
\?:0次或1次;表示其左侧字符可有可无;
\+ : 1次或多次,前左边这个字符至少出现一次;
\{m\}:精确匹配m次,表示其左侧字符精确出现m次;
\{m,n\}:至少m次,至多n次;
\{0,n\}:至多n次
\{m,\} : 至少m次
位置锚定:
^:锚定行首
$:锚定行尾
^$ :匹配空白行;
^:锚定行首
检索/etc/passwd 匹配不是r开头后面跟了任意3个字符的字符串;
$:锚定行尾
检索/etc/passwd 行尾是bash的字段;
^$ :匹配空白行;
检索test3中包含空白的行; -v 是取反,找到那些不是空白的行;
单词锚定:由非特殊字符组成的连续的字符;
锚定词首:\< ,也可用\b ;
检索/etc/passwd 中,以root为词首的行; \>可以替换成为\b
锚定词尾: \> , 也可用\b ;
检索/etc/passwd 中,以nologin为词尾的行; \>可以替换成为\b
\<PATTERN\>:匹配PATTERN能匹配到的整个单词;
检索ifconfig 命令中 匹配2个数字的词;
分组:\(\)
注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可用被grep记忆(保存于内置的变量中,这些变量是\1,\2,...);因此,还可用被引用;
\1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的匹配到的内容;
\2:引用,模式中自左而右,由第二个左括号以及与之对应的右括号中的匹配到的内容;
"\(a.b\).*\1" amb hello anb :是不能不能被匹配;要和匹配到括号的内容一样;
新建一个文档/tmp/test0 把一下内容写入;
test testr
toot ttttttot
tttt tttttt
"\(t..t\).*\1" 有用括号中匹配到的字符串;括号是什么内容,后面必须也包含;
二、扩展表达式:
扩展正则表达式的表示方法:grep -E 或者 egrep ;这两钟方式表达都可以;扩展正则表达式和基本正则表达式基本的表示方法都一样,就是不用转意字符了"\",然后只多了一个或者 | 。
字符匹配:
. :匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[0-9],[[:digit:]]
[a-z],[[:lower:]]
[A-Z],[[:upper:]]
[[:space:]]
[[:punct:]]
[0-9a-zA-Z],[[:alnum:]]
[a-zA-Z],[[:alpha:]]
次数匹配:
*:任意长度,表示0次、1次或多次;
.*:任意长度的任意字符
?:0次或1次;表示其左侧字符可有可恶
+ :1次或多次,前左边这个字符至少出现一次;
{m}:精确匹配m次,表示其左侧字符精确出现m次;
{m,n}:至少m次,至多n次;
{0,n}:至多n次
{m,}: 至少m次
位置锚定:^:行首锚定;$:行尾锚定;\<,\b:词首锚定;\>,\b: 词尾锚定
分组表示:(),\1,\2
或者:a|b:a或者b 或者是匹配两侧的所有内容;
检索/tmp/test3 中以C或c开头pu结尾的词;可以用egrep和grep -E两种表示方法来表示;
扩展正则表达式的表示方法:
例子:
正则表达式的方法:
检索/etc/passwd文件中的二位或三位的数;
扩展正则表达式的方法:
检索/etc/passwd文件中的二位或三位的数;和正则表达式相比就是少了转意符;还可以用
# egrep '\<[0-9]{2,3}\>' /etc/passwd 来表示;这里的单词锚定符是不能去掉转意符的。
fgrep:
fgrep命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。
PS:这是本人学习时整理的资料,有的是在网上搜索到的内容;如果遗漏欢迎大家来指导。
转载于:https://blog.51cto.com/sailove/1627314
Linux正则表达式grep,egrep 及相应的正则表达式用法详解相关推荐
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- linux cp -r 参数,Linux系统中cp命令的参数及用法详解
Linux系统中cp命令主要是用来复制文件或者目录.下面由学习啦小编为大家整理了Linux系统中cp命令的参数及用法详解的相关知识,希望对大家有帮助! Linux系统中cp命令的参数及用法详解:参数说 ...
- linux 指令tftp传输文件_Linux tftp 命令用法详解-Linux命令大全(手册)
tftp 在本机和tftp服务器之间使用TFTP协议传输文件 补充说明 tftp命令 用在本机和tftp服务器之间使用TFTP协议传输文件. TFTP是用来下载远程文件的最简单网络协议,它其于UDP协 ...
- linux教程 sed命令的用法,Linux基础教程之文件三剑客sed命令用法详解
sed是一种流编辑器,它是文本处理中非常强大的工具,能够完美的配合正则表达式使用,用法简单实用,非常灵活. 工作原理:sed命令处理文本时,把当前处理的行存储在一个临时缓冲区中,称为"模式空 ...
- 《Linux运维总结:find命令高级用法详解》
文章目录 一.基本用法 二.高级用法 2.1.查找时排除文件或目录 2.2.查找指定目录层级限制文件或目录 2.3.对查找到的文件执行命令操作 总结:整理不易,如果对你有帮助,可否点赞关注一下? 一. ...
- linux 进程 setuid,Linux SetUID(SUID)文件特殊权限用法详解
在讲解<权限位>一节时提到过,其实除了 rwx 权限,还会用到 s 权限,例如: [root@localhost ~]# ls -l /usr/bin/passwd -rwsr-xr-x. ...
- linux系统服务设置命令--chkconfig命令参数及用法详解
chkconfig(check config) 功能说明:chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的 ...
- linux pcie命令,setpci命令_Linux setpci 命令用法详解:查询和配置PCI设备的使用工具...
setpci命令是一个查询和配置PCI设备的使用工具. 语法setpci(选项)(参数) 选项-v:显示指令执行的细节信息: -f:当没有任何操作需要完成时,不显示任何信息: -D:测试模式,并不真正 ...
- linux iotop rpm,iotop命令_Linux iotop 命令用法详解:用来监视磁盘I/O使用状况的工具...
iotop命令是一个用来监视磁盘I/O使用状况的top类工具.iotop具有与top相似的UI,其中包括PID.用户.I/O.进程等相关信息.Linux下的IO统计工具如iostat,nmon等大多数 ...
- linux 输入、输出重定向的概念和用法详解(Day01)
介绍重定向之前先来介绍几个重要的概念:(笔记不易---- 转载请注明出处) 1.linux 的标准输入与输出 linux标准输入设备指的是键盘,标准输出设备指的是显示器,标准错误输出指的是显示器. ...
最新文章
- centos7 网卡配置vlan_【linux】Centos7单网卡多VLAN配置
- Science首发奥密克戎突刺蛋白分子水平分析,揭秘2大传染性增强原因,柳叶刀:全球大流行有望3月结束...
- Spring4.x新特性
- 蓝桥杯练习系统习题-算法训练6
- 使用RAID进行磁盘管理
- 京东:618 期间遭「黑公关」恶意抹黑;Adobe 回应“杀死Flash”;Bootstrap 5.0 Alpha 发布 |...
- 微信说不!有何不可?
- tomcat事件处理机制
- cisco路由器OSPF基础配置命令
- PCB线宽过流能力估算
- texstudio语法检查
- 1024 程序员节狂欢盛会,等了一年终于来了!
- word 保存时 不能保存
- 基于BP神经网络算法的性别识别
- 最新版表情包小程序源码无需服务器
- STM32的TIM边沿与周期对齐的坑
- 【极客赠书】向Richard Stallman提问,赢取传记《若为自由故》【活动结束】
- 极路由B70刷breed,刷灯大固件,简明步骤(转自恩山无线论坛)
- 云平台学习笔记(三)-实践
- 牛奶可乐经济学之Q6:为什么有不少学校要求学生穿校服?