day17-正则表达式

在这里插入图片描述

正则表达式符号含义

发明1套符号
不同符号不同含义
方便我们在文件中查找/过滤内容

通配符与正则区别?

作用支持的命令
通配符方便我们进行查找文件Linux下面大部分命令支持
正则方便我们进行过滤(在文件中找内容)Linux三剑客 开发语言

正则表达式中注意事项

注意中文符号
	‘’ “” . …… ¥ () {}  【】  中文
	'' "" . ^  $   () {}   []    英文
在CentOS 6中给grep egrep加上颜色方便看查找内容
 alias grep='grep --color=auto'
CentOS 7中已自动设置

正则表达式分类:

基本正则(BRE)

^...开头的行 ^old
$	以...结尾的行 old$

^$	空行 -n显示行号
		这一行中什么都没有  grep  '^$’oldboy.txt
		空行  grep -n
		排除空行  grep -nv

. (点)匹配任意字符 类似通配符的问号 不匹配空行
	grep -o  (补充grep的参数)
		显示grep每次过滤出什么内容
		显示grep执行过程
	.$  以任意字符结尾的行()

\	转义 让原有特殊含义的字符脱掉马甲 还愿本义
		\n  回车
		\t   按tab键
        tr '\n' '\t' >oldboy.txt   替换内容中的回车
*	逐行匹配,前1个字符连续出现0次或0次以上
	    000
	    000000000000000    连续出现的0
	    oldboy
.*	表示所有内容
^.*	组合符以任意0个或多个字符开头
.*$	组合符以任意0个或多个字符结尾

[abc]	匹配[]集合内的任意一个字符a或b或c也可以写成[a-c]
[^abc]	取反,不包含[]集合内的任意一个字符a或b或c也可以写成[^a-c]

小测试:

显示以m或n或o开头的行
以m或n或点结尾的行
显示以m或n或o开头的并且以m或n或点结尾的行
image.png

※ 扩展正则表达式(ERE)

egrep ===grep -E
用于在文件内查找指定的字符串。egrep执行效果与[grep] -E相似

+	匹配前一个字符1次或1次以上
		一般与[ ]一起使用
|	或者
()	分组过滤被括起来的东西表示一个整体
	用来表示后向引用
	被括起来的内容相当于是1个整体

?	匹配前一个字符0次或1{ }    匹配字符最少几次,最多几次
		a{n,m}	匹配a最少n次,最多m次
		a{n,}  	匹配a最少n次
		a{n}	匹配a只有n次
		a{,m}	匹配a最多m次
	    [:/]+	匹配:/1次或多次
	   \n	后项引用,例如(aa)\1 匹配aaaa

主要的扩展正则表达式
. + 匹配前一个字符1次或1次以上,一般与[ ]一起使用
| 或者
( ) 用来表示后向引用
? 匹配前一个字符0次或1次

[?root@oldboy /tmp]# egrep -n "oldboy|linux|txt" oldboy.txt  
2:I am oldboy teacher!
3:I teach linux.
6:my blog is http://oldboy.blog.51cto.com 
7:our size is http://blog.oldboyedu.com 
13:oldboy.txtoldboy.txt

() 后向应用(反向引用)

[?root@oldboy /tmp]# egrep -n "oldb(o|e)y" oldboy.txt  
2:I am oldboy teacher!
6:my blog is http://oldboy.blog.51cto.com 
7:our size is http://blog.oldboyedu.com 
11:my god ,i am not oldbey,but OLDBOY! 
13:oldboy.txtoldboy.txt

{ } 匹配字符最少n次,最多m次

[✡root@oldboy /tmp]# egrep  '0{1,3}' oldboy.txt 
my qq is 49000448
not 4900000448.
45702$
[✡root@oldboy /tmp]# egrep -o '0{1,3}' oldboy.txt 
000
000
00
0

查询18位身份证的小测试

首先我们添加环境:
vim oldboy.txt
金 2113241987052447205002241971051683121231231231oldboy
任 3oldboy
任 lidao97303136098
任 alex2197303136098
任 350182197303oldgir
吕 21128219920911303815000019830917607137100119741222128413018520001121592636252219871127810114052219961008852X
XXXXXXXXXXXXXXXXXX0
1-9开头过滤
egrep  '[0-9X]{18}' oldboy.txt
[✡root@oldboy /tmp]# egrep  '[0-9X]{18}' oldboy.txt 21132419870524472050022419710516831221128219920911303815000019830917607137100119741222128413018520001121592636252219871127810114052219961008852X
XXXXXXXXXXXXXXXXXX0
1-9开头 1-9X结尾
egrep '[0-9]{17}[0-9X]$' oldboy.txt
[✡root@oldboy /tmp]# egrep '[0-9]{17}[0-9X]$' oldboy.txt21132419870524472050022419710516831221128219920911303815000019830917607137100119741222128413018520001121592636252219871127810114052219961008852X

未完待续…

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值