首页 > 代码库 > linux基础--grep以及模式正则表达式

linux基础--grep以及模式正则表达式

grep [options] PATTERN [FILE....]

    -i:不区分大小写

    --color:高亮显示匹配字符

    -v:显示没有被匹配到的行

    -o:只显示被匹配到的字符串

    -E:使用扩展正则表达式

    *:任意长度的任意字符

    ?:匹配任意单个字符

    []:匹配指定范围内的任意字符

    [^]:匹配指定范围外的字符

    -A n:显示匹配到行下面n行

    -B n:显示匹配到行上面n行

    -C n:显示匹配到行前后n行


正则表达式:REGEXP

    Basic REGEXP:基本正则表达式

    Extended REGEXP:扩展正则表达式


基本正则表达式

grep默认使用基本正则表达式,使用-E参数表示使用扩展名正则表达式

 元字符

    .:匹配任意单个字符

    []:匹配指定范围内的任意单个字符

    [^]:匹配指定范围外的任意单个字符

    同时也支持通配符:http://iyull.blog.51cto.com/4664834/1882815

            [a-z],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]

            [[:space:]]:空白字符

            [[:punct:]]:标点符号

            [[:lower:]]:小写字母

            [[:upper:]]:大写字母

            [[:alpha:]]:大小写字母

            [[:digit:]]:数字

            [[:alnum:]]:数字和大小写字母



 次数匹配

    *:匹配其前面字符任意次

         a,b,ab,aab,acb,acdb

         a*b则只可以匹配b,ab,aab

    .*:任意长度的任意字符

    ?:匹配其前面的字符一次或0次,一般需要使用\?转义

         a,b,ab,aab,acb,acdb

         a\?b则只可以匹配b,ab,aab,acb,acdb

            注:grep是在行中查找,因此只要按照模式匹配到部分字符就可以匹配

    \{m,n\}:匹配其前面字符,至少m次,至多n次。

           \{1,\}:至少一次

           \{0,5\}:至少0次至多5次

[root@liang-study basic]# grep ‘[[:space:]]\{1,3\}[0-9]\{1,\}$‘ a.txt 
 1

 位置锚定:

    ^:锚定行首,此字符后面的任意内容必须出现在行首

    $:锚定行尾,此字符后面的任意内容必须出现在行尾

    ^$:空白行

    \<或者\b:其后面的字符必须作为词组的首部出现,注意书写位置

    \>或者\b:其前面的字符必须作为词组的尾部出现,注意书写位置

            例子:\<root\>:表示查找包含root作为单独词组的行

 分组:

   \(\)

     \(ab\)*:表示匹配ab任意次,即要么有ab,要么没有ab,所以全部都会匹配。如abab,ababc,a,b。

[root@liang-study basic]# grep ‘\(ab\)\{1,3\}‘ a.txt  
23ab
ab
aab
aaab

    上例,就表示匹配包含ab的1-3次

        \(ab\).*\1:引用第一个左括号以及与之对应的右括号中间的所有内容

        \2

        \3

[root@liang-study basic]# grep ‘\(ab\).*\1‘ a.txt         
23ab cdh ab
aab  root ab

        上例中表示匹配到ab后由任意字符后再次匹配ab的行

[root@liang-study basic]# grep ‘\(ab\).*\(cd\).*\2‘ a.txt 
23ab cdh ab cd

        匹配第二个左括号以及与之对应的右括号中间的所有内容


扩展正则表达式

字符匹配:

    .:匹配任意单个字符(类基本)

    []:匹配指定范围内的任意单个字符(类基本)

    [^]:匹配指定范围外的任意单个字符(类基本)

 次数匹配:

    *:匹配其前面字符任意次(类基本)

    ?:匹配其前面的字符一次或0次,一般不需要使用\转义

    +:匹配其前面字符至少一次

    (m,n):匹配其前面字符,至少m次,至多n次。一般不需要使用\转义

位置锚定:(和基本正则表达式相同)

分组:

    (ab):

    (ab){1}:引用第一个左括号以及与之对应的右括号中间的所有内容

    (ab){2}:引用第2个左括号以及与之对应的右括号中间的所有内容

    |和or:表示或者

技术分享

        注:可以看出此匹配是完整匹配A|a左边和右边。

技术分享

        注:经过分组匹配,即可匹配Ab或者ab了

例子:获取ifconfig 0-255之间的整数

ifconfig |grep -E --color ‘\<([1-9]|[1-9][0-9]|1[1-9][0-9]|2[0-4][0-9]|25[0-4])\>‘
    [1-9]:匹配符合条件的个位数
    [1-9][0-9]:匹配符合条件的两位数
    1[1-9][0-9]:匹配符合条件的1xx的三位数
    2[0-4][0-9]:匹配符合条件的2xx的三位数
    25[0-4]:匹配符合条件的25x的三位数

技术分享



本文出自 “亮公子” 博客,请务必保留此出处http://iyull.blog.51cto.com/4664834/1884328

linux基础--grep以及模式正则表达式