正则表达式基础->

描述:(grep)

正则表达式是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于两个正斜杠之间,它匹配被查找的行中任何位置出现的相同模式

 

基础正则表达式

正则表达式 描述       
\ 转义字符,将特殊字符进行转义,忽略其特殊意义
^ 匹配行首,awk中,^是匹配字符串的开始
$ 匹配行尾,awk中,$是匹配字符串的结尾
^$ 表示空行
. 匹配除换行符\n之外的任意一个字符
[ ] 匹配包含在[字符]之中的任意单个字符
[^ ] 匹配[^字符]之外的任意一个字符
[ - ] 匹配 [ ] 指定范围内的任意一个字符
? 匹配之前的项目1次或者0次
+ 匹配之前的项1次或多次
* 匹配之前的项0次或多次,.*
( ) 匹配表达式,创建一个用于匹配的子串
{ n } 匹配之前的项至少需要匹配n次
{n,} 之前的项至少需要匹配n次
{n,m} 指定之前的项至少匹配n次,最多匹配m次,n<=m
|

交替匹配 | 两边的任意一项ab(c|d)匹配abc 或 abd

 

 

 

 

 

 

 

 

 

 

 

 

特定字符:

>[[:space:]]   空格

[[:digit:]]  [0-9]

[[:lower:]]  [a-z]

[[:upper:]]  [A-Z]

[[:alpha:]]  [a-Z]

 

正则表达式练习

[root@web02 3]# cat test.txt (练习文本)
I am timfly student!
I learn linux is very happy.
test

I like badminton ball ,billiard ball and chinese chess!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com
my qq num is 5223345666666666666.
not 5728918888873333333.

命令:

#过滤率以m开头,以m结尾的行
[root@web02 3]# grep "^m" test.txt 
my blog is http://timfly.blog.51cto.com
my qq num is 5223345666666666666.
[root@web02 3]# grep "m$" test.txt 
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com


 #排除空行,并打印行号
[root@web02 3]# grep -vn "^$" test.txt 
1:I am timfly student!
2:I learn linux is very happy.
3:test
5:I like badminton ball ,billiard ball and chinese chess!
6:my blog is http://timfly.blog.51cto.com
7:our site is http://www.timfly123.com
8:my qq num is 5223345666666666666.
9:not 5728918888873333333.


#匹配任意一个字符,但不包括空行
[root@web02 3]# grep "." test.txt 
I am timfly student!
I learn linux is very happy.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com
my qq num is 5223345666666666666.
not 5728918888873333333


#匹配所有
[root@web02 3]# grep "." test.txt 
I am timfly student!
I learn linux is very happy.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com
my qq num is 5223345666666666666.
not 5728918888873333333


#匹配单个任意字符
[root@web02 3]# grep "tim.ly" test.txt 
I am timfly student!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com


#匹配以.结尾的
[root@web02 3]# grep "\.$" test.txt 
I learn linux is very happy.
my qq num is 5223345666666666666.
not 5728918888873333333.


#精确匹配到
[root@web02 3]# grep -o "8*" test.txt 
8
88888
[root@web02 3]# grep -o "tim*" test.txt 
tim
tim
tim


#匹配有abc的行,数字所在的行,所有小写字母
[root@web02 3]# grep "[abc]" test.txt 
I am timfly student!
I learn linux is very happy.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com

[root@web02 3]# grep "[0-9]" test.txt 
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com
my qq num is 5223345666666666666.
not 5728918888873333333.

[root@web02 3]# grep "[a-z]" test.txt 
I am timfly student!
I learn linux is very happy.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com
my qq num is 5223345666666666666.
not 5728918888873333333.

[root@web02 3]# grep "[a-z]" test.txt 
I am timfly student!
I learn linux is very happy.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http://timfly.blog.51cto.com
our site is http://www.timfly123.com
my qq num is 5223345666666666666.
not 5728918888873333333.


#重复8三次
[root@web02 3]# grep "8\{3\}" test.txt    ##带转义字符
not 5728918888873333333.
[root@web02 3]# grep "8{3}" test.txt     ##不带转义字符也没有正则
[root@web02 3]# egrep "8{3}" test.txt     ##正则匹配
not 5728918888873333333.
[root@web02 3]# grep -E "8{3}" test.txt     ##加-E 参数
not 5728918888873333333.


#重复数字8,3-5次
[root@web02 3]# egrep  "8{3,5}" test.txt 
not 5728918888873333333.

#重复8一次或以上
[root@web02 3]# grep -E "8{1,}" test.txt 
not 5728918888873333333.

 

posted @ 2018-09-27 09:36  少校的小木屋  阅读(195)  评论(0编辑  收藏  举报