L013-linux基础正则表达式手把手实战讲解小节

L013-linux基础正则表达式手把手实战讲解小节

  这么一看又有10天没更新博客了,最近也一直在学就是时间比较闲散,再加上做上次老师留的十多道题,所以时间比较紧张,本来做完题准备直接先看L014讲解,然后再看正则表达式,但是发现L014老师讲解的过程中已经带正则了,无奈,跳跃性失败,重新开始,那么还是按L013的来把。

  本节内容不多,只有正则表达式而且仅仅是基础的linux下的正则表达式,基本上在三剑客(awk,sed,grep)上都适用。

下面代码中的红色为我自己加上的,为了方便查看,如果想自己也加上颜色可以使用 alias grep=‘grep --color=auto’

正则表达式:


那么正则表达式的概念是什么呢?

简单的说,正则表达式就是一套处理字符串的规则和方法,以行为单位对字符串进行处理,
通过特殊的符号的辅助,我们可以快速的过滤,替换某些特定的字符串。

运维工作中,会有大量访问日志,数据日志,大数据。如何快速的过滤我们需要的内容,就靠正则表达式

awk,sed,grep(egrep)三剑客要想能工作的更高效,那一定离不开正则表达的配合。

基础正则表达式:BRE
正则表达式就是一些特殊字符,赋予了他特定的含义。
1)^word 表示搜索以word开头的

[root@moban ~]# grep "^word" lcr.log 
wordfjsdfdfk

2)word$ 表示搜索以word结尾的

[root@moban ~]# grep "word$" lcr.log  
asdlkwsnfkjsdflksdfsdkword

3)^$ 表示空行

[root@moban ~]# cat 2.txt 


dadaadadasword
[root@moban ~]# grep -v "^$" 2.txt 
dadaadadasword

4). 代表且只能代表任意一个字符

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "n.t" lcr.log 
my god , my name is not oldbey , but OLDBOY.
not boog
net
nat 
n6t
n.t

5) 转意符号,让着有着特殊身份意义的字符脱掉马甲,还原字面意义原型

6)* 重复0个或多个前面的一个字符 例:o* 可以零个o可以多个o

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "591*579" lcr.log 
My qq is 59111579
my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

7).* 匹配所有字符 例如:^.*以任意字符开头

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "^.*od" lcr.log 
my god , my name is not oldbey , but OLDBOY.


8)[] 字符集合的重复特殊字符的符号

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "b[lo]og" lcr.log 
My blog is http://lcr.blog.51cto.com
not boog

9)[^] 匹配不包含 例:[^word]匹配不包含^后的任意字符的内容
10) {n,m} 重复n到m次,前一个重复的字符 如果用egrep可以去掉斜线

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "591{1,4}579" lcr.log 
My qq is 59111579
my qq 591111579
591579

{n,} 至少n次到无限 如果用egrep可以去掉斜线

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "591{4,}579" lcr.log    
my qq 591111579
my qq 591111111579
my qq 59111111111579

{n} n次 如果用egrep可以去掉斜线

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep "591{7}579" lcr.log  
my qq 591111111579

扩展的正则表达式:ERE
1)+ 重复一个或一个以上前面的字符

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# egrep "591+579" lcr.log  
My qq is 59111579
my qq 591111579
my qq 591111111579
my qq 59111111111579
591579

2)? 重复0个或1个前面的字符

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# egrep "591?579" lcr.log  
591579
59579


3)| 用或的方式查找多个符合的字符串

[root@moban ~]# egrep "3306|1521" /etc/services 
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager

4)() 找出“用户组”字符串

[root@moban ~]# cat lcr.log 
I am oldboy linux student.
My blog is http://lcr.blog.51cto.com


My qq is 59111579
my god , my name is not oldbey , but OLDBOY.
not boog


my qq 591111579
my qq 591111111579
my qq 59111111111579
591579
59579

net
nat 
n23t
n6t
n.t
wordfjsdfdfk
asdlkwsnfkjsdflksdfsdkword
[root@moban ~]# grep -E "b(lo|oo)g" oldboy.log 
My blog is http://oldboy.blog.51cto.com
not boog

注意:用扩展的正则表达式用egrep 或者 grep -E

原文地址:https://www.cnblogs.com/lcrbg/p/5465373.html