03.24 正则表达式

第一章:什么是正则表达式

定义
1. 正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法。
2. 通过定义的这些特殊符号的辅助,系统管理员就可以快速的过滤,替换或输出需要的字符串。Linux正则表达式一般以行为单位处理的。
3. 为了处理大量文本|字符串而定义的一套规则和方法。以行为单位出来,一次处理一行。
4. 为了处理大量文本|字符串而定义的一套规则和方法。以行为单位出来,一次处理一行。

注意事项
1. 正则表达式应用非常广泛,存在于各种语言中,php、perl、python、grep、sed、awk支持。ls*通配符。
2. Linux中的正则表达式,最为常用正则表达式的命令是grep(egrep)、sed、awk。

正则表达式分类
1. 基本正则表达式(BRE basic regular expression)
2. 高级功能:扩展正则表达式(ERE,extended regular expression)

BRE和ERE的区别仅仅是元字符的不同
1. BRE(基础正则表达式)只承认的元字符有^ $ .[ ] * 其他字符识别为普通字符;
2. ERE(扩展正则表达式)则添加了(){ } ? + |等。

如何区分通配符和正则表达式

  1. 不需要思考的判断方法:在三剑客awk、sed、grep、egrep都是正则,其他都是通配符。
  2. 文件目录名==通配符
  3. 文件内容(字符串,文本,文件内容)==正则表达式
  4. 通配符和正则表达式都有“*”“?”“[ ]”,但是通配符的这些符号都能自身代表任意字符,而正则表达式的这些符号只能代表这些符号前面的字符。

第2章 基本正则表达式案例

【^】^for 找以for开头的内容

[root@mysql-db01 script]# cat test.sh 
#!/bin/bash
. /etc/init.d/functions

[ -d /oldboy ] && cd /oldboy || mkdir -p /oldboy && cd /oldboy
for i in `echo oldboy{00..10}`; do
    word=`uuidgen|md5sum |tr "0-9" "a-z"|cut -c 1-10`
    touch ${word}_$i.html
    if [ $? -eq 0 ]; then
        action "${word}_$i.html" /bin/true
    fi
done
[root@mysql-db01 script]# egrep "^f" test.sh 
for i in `echo oldboy{00..10}`; do

【$】过滤以y结尾的

[root@mysql-db01 script]# egrep  "y$" test.sh 
[ -d /oldboy ] && cd /oldboy || mkdir -p /oldboy && cd /oldboy

【^$】表示空行 文件里面的空行 三剑客老三grep -n显示行号

[root@mysql-db01 script]# egrep -n "^$" test.sh 
3:

【.】点代表且只能代表任意一个字符/文本/符号(不匹配空行)扩展:.的其他含义:当前目录,加载文件source或. /etc/profile

[root@Never-downtime gqc]# grep "." oldboy.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!

[root@Never-downtime gqc]# grep "oldb.y" oldboy.txt 
I am oldboy teacher!

[root@Never-downtime gqc]# grep "\.$" oldboy.txt 
I teach linux.

【\】转义字符 以.结尾

[root@Never-downtime gqc]# grep "\.$" oldboy.txt 
I teach linux.

【*】重复前一个文本/字符0次或多次,之前的一个文本或字符连续0个或多个重复/连续0次的时候,表示啥也没有(空),匹配出文件所有内容。

[root@Never-downtime gqc]# grep "0*" oldboy.txt 
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!

【.*】匹配所有字符/文本。^.*以任意多个字符开头;.*$以任意多个字符结尾;

[root@Never-downtime gqc]# grep ".*" oldboy.txt 
I am oldboy teacher!
I teach linux.

【0*】正则表达式表示重复或连续的时候

[root@mysql-db01 script]# egrep -o "0*" test.sh 
00
0
0
0
0

[root@mysql-db01 script]# egrep "0" test.sh 
for i in `echo oldboy{00..10}`; do
    word=`uuidgen|md5sum |tr "0-9" "a-z"|cut -c 1-10`
    if [ $? -eq 0 ]; then

[root@Never-downtime gqc]# egrep "90*" oldboy.txt 
my qq num is 49000448.
not 4900000448.

[root@Never-downtime gqc]# grep "^.*o" oldboy.txt 
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!

[abc][0-9][.,/] 匹配字符集合(一个筐里有很多条件)内的任意一个字符a或b或c;[a-z]匹配所有小些字母。中括号:表示一个整体,中括号里暗藏着无限的可能[abc]找a或b或c 可以写成[a-c]

[root@Never-downtime gqc]# grep [abc] oldboy.txt 
I am oldboy teacher!
I teach linux.

[root@Never-downtime gqc]# grep [a-z] oldboy.txt 
I am oldboy teacher!
I teach linux.

[root@Never-downtime gqc]# grep [a-zA-Z0-9] oldboy.txt 
I am oldboy teacher!
I teach linux.
not 4900000448.

练习题 oldboy.txt里面找m或n或o开头的并且以m或g结尾的行!

[root@Never-downtime gqc]# egrep "^[mno].*[mg]$" oldboy.txt 
my blog is http://oldboy.blog.51cto.com
our site is www.etiantian.org

第三章 高级扩展正则

【^】^word 找以word开头的内容

[root@Never-downtime gqc]# grep "^m" oldboy.txt 
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

*【[^mn]】排除m或n开头的行*

[root@Never-downtime gqc]# egrep "^[^mn]" oldboy.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!

【a{n,m}】重复a字符n到m次

[root@Never-downtime gqc]# egrep  "0{1,3}" oldboy.txt 
my qq num is 49000448.
not 4900000448.

【+】重复前一个字符一次或一次以上,前一个字符连续一个或多个,可以去除连续的前一个字符。

[root@Never-downtime gqc]# egrep -o  "0+" oldboy.txt 
000
00000

[root@mysql-db01 script]# egrep "d+" test.sh 
. /etc/init.d/functions
[ -d /oldboy ] && cd /oldboy || mkdir -p /oldboy && cd /oldboy
for i in `echo oldboy{00..10}`; do
    word=`uuidgen|md5sum |tr "0-9" "a-z"|cut -c 1-10`
    touch ${word}_$i.html
        action "${word}_$i.html" /bin/true
done

[root@Never-downtime gqc]# egrep -o  "[a-z]+" oldboy.txt 
am
oldboy
teacher
teach

【|】表示或者 同时过滤多个字符

[root@Never-downtime gqc]# 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

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i  "inode size|inode count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              593344
Inode size:           256

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i  "^block size|^block count"
dumpe2fs 1.41.12 (17-May-2010)
Block count:              2373376
Block size:               4096

【()】分组过滤被括起来的东西表示一个整体(一个字符),后向引用。

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i "inode size|inode count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              593344
Inode size:           256

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i "inode (size|count)"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              593344
Inode size:           256

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i "block (size|count)"
dumpe2fs 1.41.12 (17-May-2010)
Block count:              2373376
Reserved block count:     118668
Block size:               4096

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i "(block|inode) (size|count)"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              593344
Block count:              2373376
Reserved block count:     118668
Block size:               4096
Inode size:           256

[root@Never-downtime gqc]# dumpe2fs /dev/sda3 |egrep -i  "(inode|^block) (size|count)"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              593344
Block count:              2373376
Block size:               4096
Inode size:           256

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值