刚开始只有
基本正则表达式
^ $ . [] *
基础正则
Basic RE BRE ^ .* . * [] ;[^]
后面由于需要增加了
扩展正则表达式
() {} ? + |
扩展正则
| () {} ?
通配符与正则表达式区别
(一、)正则表达式
方便我们进行在文件中过滤出文件内容
三剑客grep sed awk python java
(二、)通配符
查找文件名
Linux 大部分命令都支持 以.txt等结尾的文件
注意事项
注意中文符号与英文符号不同
grep/egerp添加配置名称(CentOS7不用配置)
基础正则的表达含义
方便我们在文件中查找/过滤内容
环境设置
[root@lidao ~]# cat /tmp/oldboy
ldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
grep用法
[root@lidao ~]# grep "3306" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
^以..开头的字符
[root@lidao ~]# grep "^ssh" /etc/services
ssh 22/tcp # The Secure
Shell (SSH) Protocol
ssh 22/udp # The Secure Shell (SSH) Protocol
ssh 22/sctp # SSH
sshell 614/tcp # SSLshell
sshell 614/udp # SSLshell
ssh-mgmt 17235/tcp # SSH Tectia Manager
ssh-mgmt 17235/udp # SSH Tectia Manager
以m开头的
[root@lidao ~]# grep "^m" /tmp/oldboy my blog is
http://oldboy.blog.51cto.com my qq is 49000448 my god ,i am
not oldbey,but OLDBOY!
$以..结尾
空格演示的符号
[root@lidao ~]# grep "m$" /tmp/oldboy
[root@lidao ~]# grep "m $" /tmp/oldboy my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com
隐藏的符号$
[root@lidao ~]# cat -A /tmp/oldboy
$
ldboy.txt$
I am oldboy teacher!$
I teach linux.$
$
I like badminton ball ,billiard ball and chinese chess!$
my blog is http://oldboy.blog.51cto.com $
our size is http://blog.oldboyedu.com $
my qq is 49000448$
$
not 4900000448.$
my god ,i am not oldbey,but OLDBOY! $
$
空行 [root@lidao ~]# grep "^$" /tmp/oldboy
显示空行号 grep -n
[root@lidao ~]# grep -n "^$" /tmp/oldboy
1:
5:
10:
13:
[root@lidao ~]# grep -vn "^$" /tmp/oldboy
2:ldboy.txt
3:I am oldboy teacher!
4:I teach linux.
6:I like badminton ball ,billiard ball and chinese chess!
7:my blog is http://oldboy.blog.51cto.com
8:our size is http://blog.oldboyedu.com
9:my qq is 49000448
11:not 4900000448.
12:my god ,i am not oldbey,but OLDBOY!
.任意一个字符(单个),不会匹配空行
grep -o 显示grep执行过程
[root@lidao ~]# grep -o '.$' /tmp/oldboy
I teach linux. not 4900000448.
\转义字符 去掉符号原有的特殊含义
/n 回车
/t teb
转换n为回车
[root@lidao ~]# echo -e "nood\nbood\nmoon"
nood
bood
moon
* 前一个字符连续出现0次或0次以上 逐行匹配
[root@lidao ~]# grep '0*' /tmp/oldboy
ldboy.txt I am oldboy teacher! I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com my qq is 49000448
not 4900000448. my god ,i am not oldbey,but OLDBOY!
.* 所有符号(包括空行)逐行匹配
以o开头的内容
[root@lidao ~]# grep '^.*O' /tmp/oldboy
my god ,i am not oldbey,but OLDBOY!
特性
来者不拒 能匹配多少就匹配多少
匹配所有的o 连续出现就会匹配说又停不下来
()
表示一个整体
方向引用/后向引用
[]
[abc] 相当于一个字符(每次匹配一个zifu),匹配到a或 b或c
[root@lidao ~]# grep '[abc]' /tmp/oldboy
ldboy.txt I am oldboy teacher! I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our size is
http://blog.oldboyedu.com my god ,i am not oldbey,but OLDBOY!
所有大写小写和数字
grep '[a-zA-Z0-9]' /tmp/oldboy
所有小写和数字
grep '[a-Z0-9]' /tmp/oldboy
所有大小写字母
grep '[0-Z]' /tmp/oldboy
显示以m或n或o开头的行
[root@lidao ~]# grep '[1]' /tmp/oldboy
my blog is http://oldboy.blog.51cto.com our size is
http://blog.oldboyedu.com my qq is 49000448 not 4900000448.
my god ,i am not oldbey,but OLDBOY!
以m或n或点结尾的行
grep '[mo.]$' /tmp/oldboyI teach linux. not 4900000448.
显示以m或n或o开头的并且以m或n或点结尾的行
[root@lidao ~]# grep '[2].*[mo.]$' /tmp/oldboy
not 4900000448. {}
[^abc] 不要a不要b不要c
grep '[^abc]' /tmp/oldboy
[^abc]不要字符 过滤所有不包含a或b或c的行
grep -v 不要行
总结
^ . * .* \ [] [^]
扩展正则
+前一个字符连续或连续出现1次或多次 一般配合[] 使用
[root@lidao ~]# egrep '[a-Z]+' /tmp/oldboy
ldboy.txt I am oldboy teacher!
I teach linux. I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our size is
http://blog.oldboyedu.com my qq is 49000448 not 4900000448. my god ,i am not oldbey,but OLDBOY!
| 是或者
[root@lidao ~]# egrep 'oldboy|linux' /tmp/oldboy I am oldboy teacher!
I teach linux. my blog is
http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com
()
小括号
被括起来的内容相当于是一个整体
用来表示后向引用(反向引用)
{}
连续出现
{n,m}匹配其前面的字符至少n次,至多m次
显示0至少出现的2次,最多出现3次的内容
[root@lidao ~]# egrep '0{2,3}' /tmp/oldboy
my qq is 49000448
not 4900000448.
=0 * =1 +
b{m,n}前一个字符连续出现m次
b{m,}前一个字符连续至少出现m次
b{,n}前一个字符连续最多出现n次
?
匹配前一个字符重复出现0次或一次
[root@lidao ~]# egrep '0?' /tmp/oldboy
ldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
总结
| () {} ?