第六章 正则表达式

第六章 正则表达式

1,正则表达式概念

1,正则表达式(re),又称规则表达式。用来处理字符串的方法,以行为单位进行字符串的处理,通过一些特殊字符,让用户完成查询,删除,替换等目的。

2,在大多数程序里,RE都被置于两个正斜杠之间,例如/I[oO]ve/。

3,RE通常缩写成regex,单数有regexp,regex;复数有regexps,regexes,regexen。

2,正则表达式元字符

1,RE由普通字符和元字符组成。

  • 普通字符:包含大小写字母和数字。
  • 元字符:具有特殊含义。

2,元字符通常由各种执行模式匹配操作的程序来解析

image.png

image.png

3,正则表达式语法

RE是由普通字符(a~z)及特殊字符(称为元字符)组成的文字模式。

image.png

RE可以是单个字符,字符集合,字符范围,字符间的选择等任意组合

4,正则表达式运算符优先级

RE从左到右进行计算。相同优先级的RE从左到右运算,不同优先级的RE运算先高右低

image.png

5,正则表达式匹配规则

基本模式匹配

**模式是RE最基本的元素。**它是一组描述字符串特征的字符组成的字符集,用于匹配字符串。

\n:换行
\r:回车
\t:制表符
\f:换页

字符簇

用连字符可以表示一个字符的范围。

[a-z] #匹配所有 的小写字母
[A-Z] #匹配所有的大写字母
[a-zA-Z] #匹配所有的字母
[0-9] #匹配所有的数字

#^匹配开头(当在方括号里表示非);$匹配结尾
^[^0-9][0-9]$	#第一个字符不能是数字
[^a-z]	#除字母外的所有字符
[^$]	#空行

image.png

image.png

image.png

#花括号的三种用法:
(1){x}:前面的字符只出现x次。
(2){x,}:前面的内容出现x或多次。
(3){x,y}:前面的内容至少出现x次,但不超过y次。

^[a-zA-Z0-9_ ]{1, }$	#所有包含一个以上的字母,数字或下画线的字符串
^[1-9][0-9]{0, }$	#所有的正整数
^\-{0,1} [0-9]{1, }$	#所有的整数
^[ - ]?[0-9]+\.?[0-9]+$或^\-?[0-9]{1, }\.?[0-9]{1, }$	#所有的浮点数

6,grep命令

grep命令简介

grep命令是一种强大的文本搜索工具,是Linux文本处理工具中的三剑客之一。

通常grep有三个版本:grep、fgrep,egrep。

grep命令语法格式

#语法格式:
grep	[options]	pattern		[filename]

找到匹配的表达式:	grep返回的退出状态为0
没找到匹配的表达式:	grep返回的退出状态为1
找不到指定文件:	grep返回的退出状态为2
grep命令,可以来自标准输入或管道

grep命令使用方式

image.png

image.png

-q,-v,-R(-r),-A,-B,-C,-o
针对“--color” 选项,在.bashrc 或者.bash profile 文件中加入alias grep=grep -color- auto,生效后,grep的搜索结果自动高亮匹配。

针对“搜索字符串”选项,使用正则表达式时必须用单引号'括起来,避免与Shell的元字符冲突。结合grep 与正则表达式,能快速准确地找到希望匹配的字符串和行,提高工作效率。

grep命令结合正则表达式使用

image.png

image.png

其中,“\1”、“2”、$是后向引用,引用前面的分组括号中的模式所匹配的字符。在某行文本的检查中,如果使用“()”, 则分组括号中的模式匹配的某内容可以被引用。扩展正则表达式与正则表达式略有不同。

image.png

image.png

grep命令结合正则表达式案例实战

1#使用egerp匹配文件中root字符串
[root@localhost ~]# egrep 'root' /etc/passwd /etc/shadow /etc/hosts
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$6$YwwVMLULtamj9HkA$abG.jwCmQWMr.W9rWibB6y6WGfuVKM/BDdtCoc6OhKnfgHRLvGfeXnA37BILKUIlKMIplJyRd7W6X1jQIzCP.0::0:99999:7:::

2#使用egrep列出匹配行的文件名
[root@localhost ~]# egrep -l 'root' /etc/passwd /etc/shadow /etc/hosts
/etc/passwd
/etc/shadow

3#在每一行之前加上该行在文件中的相对行号
/etc/passwd:1:root:x:0:0:root:/root:/bin/bash
/etc/passwd:10:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:1:root:$6$YwwVMLULtamj9HkA$abG.jwCmQWMr.W9rWibB6y6WGfuVKM/BDdtCoc6OhKnfgHRLvGfeXnA37BILKUIlKMIplJyRd7W6X1jQIzCP.0::0:99999:7:::

4#使用egrep匹配IP地址
[root@localhost ~]# egrep '([0-9](1,3)\.){3}[0-9]{1,3}'

5#找出/etc/rc.d/init.d/functions文件中行首为某单词(包含下划线)后面跟一个小括号的行
[root@localhost ~]# cat /etc/rc.d/init.d/functions | grep -Eo "^[a-zA-Z]*_*.*\(\)"

6#列出/etc命令下所有以.conf结尾的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中
[root@localhost ~]# find /etc/ -name '*.conf' | grep -Eo "[^/]*(\.conf)$" |tr 'a-z' 'A-Z' >/tmp/etc.conf

7#显示/proc/meminfo文件中以大小s开头的行
[root@localhost ~]# cat /proc/meminfo |grep "^[sS]"

8#显示/etc/passwd文件中不以/bin/bash结尾的行。
[root@localhost ~]# cat /etc/passwd |grep -v "/bin/bash$"

9#找出“netstat -tan”,命令的结果中以“LISTEN"后跟任意多个空白字符结尾的行。
[root@localhost ~]# netstat -tan |grep "LISTEN[[:space:]].*"

10#显示CentOS 7上所有系统用户的用户名和UID。
[root@localhost ~]# cat /etc/passwd|cut -d ":" -f1,3|grep -v "root"|grep -v "[0-9]\{4,\}"

11#取出文件/ete/inittab文件中,以#开头,且后面跟一个空格的行。
[root@localhost ~]# grep "^#[[:space:]]" /etc/inittab

12#使用egrep取出/etc/rc.d/init.d/functions中其基名。
[root@localhost ~]# echo /etc/rc.d/init.d/functions |grep -o "\b[[:alnum:]]+/*$"

13#取出grep选项-R。
[root@localhost ~]# grep --help|grep "\-R"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值