zoukankan      html  css  js  c++  java
  • linux基础学习-10.3-正则表达式详解

    一、正则表达式 RE regular expression

    1、什么是正则 为何用它?

    你可以通过什么方法选出这里面的身份证号码。

    440304199604012792

    130528197108126121

    3605sss98304033896

    342923198310042132

    1404ddddddddd5694X

    61242619860416291X

    5002xxxxxx04279521

    330900199806382320

    654126197703092303

    131127197105115662

    数字与X(在最后一位)

    通过符号匹配查找出各种文字。

    正则表达式通过特殊符号 ^ $ [] . * 表示各种各样的文字。

    方便我们处理文本(日志)。

    2、正则使用范围

    谁可以使用正则?

    三剑客正则(grep sed awk )

    python java

    3、正则表达式与通配符区别

    正则-----在文件中进行过滤(查找文件内容) 三剑客支持

    通配符---找出文件(文件名) 大部分命令都可以使用

    4、使用正则注意事项

    1) 正则默认是按照行为单位处理。

    2) 一定要注意不要使用中文符号。

    . ''""^ `` ( ) {} [] <>

    。‘’“”……••( ){}【】《》

    3) 给grep/egrep加上别名

    cat >>/etc/profile<<EOF

    alias grep='grep --color=auto'

    alias egrep='egrep --color=auto'

    EOF

    source /etc/profile

    5、正则分类

    基础正则: ^ $ . * []

    扩展正则: + | () {} ?

    基本正则 grep sed

    扩展的正则 egrep sed -r awk

    适合linux三剑客

    以行为单位处理

    cat >>/etc/profile<<EOF

    alias egrep='egrep --color=auto'

    alias grep='grep --color=auto'

    EOF

    source /etc/profile

    export LC_ALL=C

    测试文件

    cat >>~/test/oldboy.log<<EOF

    I am oldboy teacher!

    I teach linux.

    I like badminton ball ,billiard ball and chinese chess!

    my blog ishttp://oldboy.blog.51cto.com

    our site ishttp://www.etiantian.org

    my qq num is 49000448.

    not 4900000448.

    my god ,i am not oldbey,but OLDBOY!

    gd

    good

    god

    goood

    gooood

    oldboy1

    EOF

    二、基础正则

    基础正则(BRE)第一波字符说明

    1、 ^word 匹配开头word

    2、 word$ 匹配word结尾

    3、 ^$ 匹配开头结尾 即空行

    [root@oldboy test]# grep "^m" oldboy.log

    my blog ishttp://oldboy.blog.51cto.com

    my qq num is 49000448.

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy test]# grep "m$" oldboy.log

    my blog ishttp://oldboy.blog.51cto.com

    [root@oldboy test]# grep -n "^$" oldboy.log

    3:

    8:

    [root@oldboy36 test]# grep "^m" oldboy.log

    my blog ishttp://oldboy.blog.51cto.com

    my qq num is 49000448.

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -n "^$" oldboy.log

    3:

    8:

    [root@oldboy36 test]# grep "oldboy" oldboy.log

    I am oldboy teacher!

    my blog ishttp://oldboy.blog.51cto.com

    [root@oldboy36 test]# grep "oldb.y" oldboy.log

    I am oldboy teacher!

    my blog ishttp://oldboy.blog.51cto.com

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep "oldb.y" oldboy.log -o

    oldboy

    oldboy

    oldbey

    [root@oldboy36 test]# grep ".$" oldboy.log

    I teach linux.

    my qq num is 49000448.

    not 4900000448.

    基础正则(BRE)第二波字符说明

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

    转译符号,特殊字符还原本意

    表示换行

    在 echo sed awk 中使用

    * 匹配前面的一个字符0次或多次(任意多次)

    .* 匹配任意一个字符任意多次(任意字符串)

    ^.* 匹配开头任意字符串

    [root@oldboy36 test]# grep "^.*o" oldboy.log

    I am oldboy teacher!

    I like badminton ball ,billiard ball and chinese chess!

    my blog ishttp://oldboy.blog.51cto.com

    our site ishttp://www.etiantian.org

    not 4900000448.

    my god ,i am not oldbey,but OLDBOY!

    说明:如果匹配的内容在一行中有多处,grep会从左到右匹配到最后一个,多多益善

    提示:点(.)的特殊含义小结:

    1、当前目录

    2、使得文件生效相当于source

    3、隐藏文件的开头

    4、任意一个字符

    [root@oldboy36 test]# grep -n "." oldboy.log

    2:I teach linux.

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    9:not 4900000448.

    [root@oldboy36 test]# grep -n "." oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    9:not 4900000448.

    10:my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -n ".*" oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    3:

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    8:

    9:not 4900000448.

    10:my god ,i am not oldbey,but OLDBOY!

    基础正则(BRE)第三波字符说明

    [abc] 匹配a、b、c任意一个字符

    [^abc] 匹配非a、非b、非c 任意一个字符

    a{n,m} 匹配a这个字符 n到m次

    a{n,} 匹配a这个字符至少n次

    a{n} 匹配a这个字符n次

    a{,m} 匹配a这个字符最多m次

    注意: 上面的 是转义 ,但是在 egrep (grep -E) 或 sed -r 或 awk {} 不需要转义

    [root@oldboy36 test]# grep -n "[abc]" oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    10:my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -n "[^abc]" oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    9:not 4900000448.

    10:my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -n "[a-Z0-9]" oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    9:not 4900000448.

    10:my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -n "^[abc]" oldboy.log

    [root@oldboy36 test]# grep -n "[^abc]" oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    9:not 4900000448.

    10:my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -n "^[^abc]" oldboy.log

    1:I am oldboy teacher!

    2:I teach linux.

    4:I like badminton ball ,billiard ball and chinese chess!

    5:my blog ishttp://oldboy.blog.51cto.com

    6:our site ishttp://www.etiantian.org

    7:my qq num is 49000448.

    9:not 4900000448.

    10:my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep "[^a-z]" oldboy.log

    I am oldboy teacher!

    I teach linux.

    I like badminton ball ,billiard ball and chinese chess!

    my blog ishttp://oldboy.blog.51cto.com

    our site ishttp://www.etiantian.org

    my qq num is 49000448.

    not 4900000448.

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep "[^0-9]" oldboy.log

    I am oldboy teacher!

    I teach linux.

    I like badminton ball ,billiard ball and chinese chess!

    my blog ishttp://oldboy.blog.51cto.com

    our site ishttp://www.etiantian.org

    my qq num is 49000448.

    not 4900000448.

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep "[^0-9]" oldboy.log

    I am oldboy teacher!

    I teach linux.

    I like badminton ball ,billiard ball and chinese chess!

    my blog ishttp://oldboy.blog.51cto.com

    our site ishttp://www.etiantian.org

    my qq num is 49000448.

    not 4900000448.

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep -v "[0-9]" oldboy.log

    I am oldboy teacher!

    I teach linux.

    I like badminton ball ,billiard ball and chinese chess!

    our site ishttp://www.etiantian.org

    my god ,i am not oldbey,but OLDBOY!

    [root@oldboy36 test]# grep "[0-9]" oldboy.log

    my blog ishttp://oldboy.blog.51cto.com

    my qq num is 49000448.

    not 4900000448.

    [root@oldboy36 test]# grep "0{2,3}" oldboy.log

    my qq num is 49000448.

    not 4900000448.

    [root@oldboy36 test]# grep -o "0{2,3}" oldboy.log

    000

    000

    00

    [root@oldboy36 test]# grep "0{1,5}" oldboy.log

    my qq num is 49000448.

    not 4900000448.

    [root@oldboy36 test]# grep -o "0{1,5}" oldboy.log

    000

    00000

    [root@oldboy36 test]# egrep "0{1,5}" oldboy.log

    my qq num is 49000448.

    not 4900000448.

    [root@oldboy36 test]# egrep -o "0{1,5}" oldboy.log

    000

    00000

    三、扩展正则

    . 匹配前面一个字符一次或多次

    a+ 匹配a这个字符一次或多次

    ? 匹配前面一个字符0次或1次

    a? 匹配a这个字符0次或1次

    | 表示或者 用于同时过滤多个

    ( ) 分组 后向引用

    egrep "0+" oldboy.txt

    egrep -o "0+" oldboy.txt

    egrep -o "[a-z]+" oldboy.txt

    egrep "[a-z]+" oldboy.txt

    egrep -o "[a-z]+" oldboy.txt

    egrep -o "[a-zA-Z]+" oldboy.txt

    egrep -o "[a-Z]+" oldboy.txt

    [root@oldboy36 test]# egrep "go?d" oldboy.log

    my god ,i am not oldbey,but OLDBOY!

    gd

    god

    [root@oldboy36 test]# egrep "go+d" oldboy.log

    my god ,i am not oldbey,but OLDBOY!

    good

    god

    goood

    gooood

    [root@oldboy36 test]# egrep "go*d" oldboy.log

    my god ,i am not oldbey,but OLDBOY!

    gd

    good

    god

    goood

    gooood

    [root@oldboy36 test]# egrep "go{0,3}d" oldboy.log

    my god ,i am not oldbey,but OLDBOY!

    gd

    good

    god

    goood

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |grep -i "inode size"

    dumpe2fs 1.41.12 (17-May-2010)

    Inode size: 128

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |grep -i "block size"

    dumpe2fs 1.41.12 (17-May-2010)

    Block size: 1024

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |grep -i "inode count"

    dumpe2fs 1.41.12 (17-May-2010)

    Inode count: 51200

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |grep -i "block count"

    dumpe2fs 1.41.12 (17-May-2010)

    Block count: 204800

    Reserved block count: 10240

    [root@oldboy36 ~]# echo "##**##@@##@##*#1@@@@@@@2**@@@**##**" |egrep "[#@*]+"

    ##**##@@##@##*#1@@@@@@@2**@@@**##**

    [root@oldboy36 ~]# echo "##**##@@##@##*#1@@@@@@@2**@@@**##**" |egrep "[#@*]+" -o

    ##**##@@##@##*#

    @@@@@@@

    **@@@**##**

    [root@oldboy36 test]# egrep "oldb(o|e)y" oldboy.log

    I am oldboy teacher!

    my blog ishttp://oldboy.blog.51cto.com

    my god ,i am not oldbey,but OLDBOY!

    oldboy1

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |egrep -i "(inode|block) size"

    dumpe2fs 1.41.12 (17-May-2010)

    Block size: 1024

    Inode size: 128

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |egrep -i "(inode|block) count"

    dumpe2fs 1.41.12 (17-May-2010)

    Inode count: 51200

    Block count: 204800

    Reserved block count: 10240

    [root@oldboy36 test]# dumpe2fs /dev/sda1 |egrep -i "(inode|block) (size|count)"

    dumpe2fs 1.41.12 (17-May-2010)

    Inode count: 51200

    Block count: 204800

    Reserved block count: 10240

    Block size: 1024

    Inode size: 128

    练习题:

    1、什么是正则及正则的作用?

    2、基础正则的相关符号

    3、扩展正则的相关符号

  • 相关阅读:
    MySQL架构备份
    MySQL物理备份 xtrabackup
    MySQL物理备份 lvm-snapshot
    MySQL逻辑备份mysqldump
    MySQL逻辑备份into outfile
    MySQ数据备份
    前端基础-- HTML
    奇淫异巧之 PHP 后门
    php中代码执行&&命令执行函数
    windows进程中的内存结构(缓冲溢出原理)
  • 原文地址:https://www.cnblogs.com/Klanti/p/9143248.html
Copyright © 2011-2022 走看看